使用ajax时必须留心两类错误,他们之间的区别源于视角不同。

一、第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻例如止了请求发送到服务器,例如DNS无法解析主机名,连接请求被拒绝,或者url无效。

二、第二类问题是从应用程序的角度看到的问题而非XMLHttpRequest对象。它们发生于请求成功发送至服务器,服务器接受请求、进行处理并生成响应,但该响应并不指向你期望的内容时。如:如果你请求的URL不存在,这类问题就会发生。

一、处理设置错误

需要处理的第一类问题是向XMLHttpRequest对象传递了错误的数据,比如格式不正确的URL,它们极其容易发生在生成基于用户输入的URL时。这是一种会阻止请求执行的错误,而XMLHttpRequest对象会在发生这类事件时抛出一个错误。这就意味着你需要用一条try...catch语句来围住设置请求的代码,如下所示:

try{
...
httpRequest.open("GET","http://");
...
httpRequest.send();
}catch(error){
displayErrorMsg("try/catch",error.message)
}

catch子句让你有机会从错误中恢复。可以选择提示用户输入一个值,也可以回退至默认URL,或是简单地丢弃这个请求。

二、处理请求错误

第二类错误发生在请求已生成,但其他方面出错时。注册一个error事件监听器,浏览器就会向你的监听函数发送一个Event对象。httpRequest.onerror=handleError;

function handleError(e){
displayErrorMsg("Error event",httpRequest.status+httpRequest.statusText)
}

当这类错误发生时,你能从XMLHttpRequest对象获得何种程度的信息取决于浏览器,遗憾的时,大多数情况下你会得到值为0的status和空白的statusText值。

第二个问题是URL和生成请求的脚本具有不同的来源,在默认情况下这是不允许。你通常只能向载入脚本的同源URL发送Ajax请求。浏览器报告这个问题时可能会bu'jin抛出Error或者触发error事件,不同浏览器处理方式不尽相同。不同浏览器还会在不同的时点检查来源,这就意味着你不一定总是能看到浏览器对同一问题突出显示。你可以使用跨站资源(CORS Cross-Origin Resource Sharing)来绕过同源限制。

三、处理应用程序错误

最后一类错误发生于请求完成(从XMLHttpRequest对象的角度看),但没有返回你想要的数据时。这一过程本身没有错误(因为请求已成功完成),你需要根据status属性来确定发生了什么。当你请求某个不存在的文档时,你会获得404这个状态码,它的意思是服务器无法找到请求的文档,你可以看到我是如何处理200(意思是ok)以外的状态码的:

if(httpRequest.status==200){
target.innerHtml=httpRequest.responseText;
}else{
document.getElementById("statusmsg").innerHtml="Status:"+httpRequest.statusText;
}

在这个例子中,我只是简单地显示了status和statusText的值。而在真正的应用程序里,你需要以一种有用且有意义的方式进行恢复(比如显示备用内容或警告用户有问题,具体看哪种更适合应用程序)

ajax处理错误(六)的更多相关文章

  1. 框架基础:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布

    距离上一次博客大概好多好多时间了,感觉再不搞点东西出来,感觉就废了的感觉.这段时间回老家学习驾照,修养,然后7月底来上海求职(面了4家,拿了3家office),然后入职同程旅游,项目赶进度等等一系列的 ...

  2. 前端通信:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布

    距离上一次博客大概好多好多时间了,感觉再不搞点东西出来,感觉就废了的感觉.这段时间回老家学习驾照,修养,然后7月底来上海求职(面了4家,拿了3家office),然后入职同程旅游,项目赶进度等等一系列的 ...

  3. jQuery ajax请求错误返回status 0和错误error的问题

    上周发现一个jQuery ajax请求错误返回status 0和错误error的问题,responseText是"error",状态码是0而不是200: $.ajax({ type ...

  4. 全局配置一个ajax的错误监控

    全局配置一个ajax的错误监控,比如$(document).ajaxError(function(evt, req, settings){    if(req && (req.stat ...

  5. JQuery.Ajax之错误调试帮助信息

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...

  6. 转:JQuery.Ajax之错误调试帮助信息

    今天发现一篇讲Ajax比较好的文章,汇总下,作为自己的知识储备. 下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. typ ...

  7. asp.net ajax 调用错误解决

    ajax调用aspx页面出现如下错误 前台源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  8. [转]JQuery.Ajax之错误调试帮助信息

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...

  9. JQuery.Ajax之错误调试帮助信息介绍

    下面是Jquery中AJAX参数详细列表: timeout Number 设置请求超时时间(毫秒).此设置将覆盖全局设置. async Boolean (默认: true) 默认设置下,所有请求均为异 ...

随机推荐

  1. HDU——T 2444 The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others)    Memory Limi ...

  2. C++的hashmap和Java的hashmap

    C++里面是这样的:typedef std::unordered_map<std::string,std::string> stringmap; std::unordered_map< ...

  3. WET Dilutes Performance Bottlenecks

    WET Dilutes Performance Bottlenecks Kirk Pepperdine THE IMPORTANCE OF THE DRY PRINCIPLE (Don't Repea ...

  4. BZOJ1830: [AHOI2008]Y型项链 & BZOJ1789: [Ahoi2008]Necklace Y型项链

    [传送门:BZOJ1830&BZOJ1789] 简要题意: 给你3个字符串,你每一次可以在一个字符串的末端删除一个字符或添加一个字符,你需要用尽量少的操作次数使得这3个字符串变成一样的. 题解 ...

  5. 智课雅思短语---四、Exploit to the full one’s favorableconditions and avoid unfavorable ones

    智课雅思短语---四.Exploit to the full one’s favorableconditions and avoid unfavorable ones 一.总结 一句话总结:扬长避短 ...

  6. React ----- 路由懒加载的几种实现方案

    传统的两种方式 1.import() 符合ECMAScript提议的import()语法,该提案与普通 import 语句或 require 函数的类似,但返回一个 Promise 对象.这意味着模块 ...

  7. Pickling

    Pickle translates almost any type of object into a string. pickle.dumps takes an object as a paramet ...

  8. 解决Linux下yum安装无法解析URL的问题

    问题: [root@yaya ~]# yum -y install gcc-* Loaded plugins: fastestmirror, presto Could not retrieve mir ...

  9. SecondaryNameNode合并元信息过程

  10. tomcat到底是干什么用的?用大白话讲一下

    通俗点说他是jsp网站的服务器之一,就像asp网站要用到微软的IIS服务器,php网站用apache服务器一样,因为你的jsp动态网站使用脚本语言等写的,需要有服务器来解释你的语言吧,服务器就是这个功 ...