日期:2014-05-16 浏览次数:20418 次
(默认: 自动判断 (xml 或 html)) 请求失败时调用时间。参数有以下三个:XMLHttpRequest 对象、错误信息、(可选)捕获的错误对象。如果发生了错误,错误信息(第二个参数)除了得到
null
之外,还可能是
"timeout"
,
"error"
,
"notmodified"
和
"parsererror"
。
error事件返回的第一个参数XMLHttpRequest有一些有用的信息: XMLHttpRequest.readyState : 状态码 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已经接收到全部响应内容 3 - (交互)正在解析响应内容 4 - (完成)响应内容解析完成,可以在客户端调用了
XMLHttpRequest .status属性:一些错误代码:【见下边】
?
我们知道Invalid JSON错误导致的json对象不能解析,一般都是服务器返回的json字符串的语法有错误。这种情况下,我们只需要仔细的检查一下json就可以解决问题。
下面说一下,最近在使用jquery 1.4中使用$.ajax()方法解析json对象遇到的问题。
Json对象是:
[{name:'二手房出售',infoCount:0,pageUrl:'/ershoufang'},{name:'二手房求购 ',infoCount:0,pageUrl:'/qiugou'},{name:'二手房装修',infoCount:0,pageUrl:' /esfzhuangxiu'},{name:'二手回收',infoCount:0,pageUrl:'/huishou'},{name:'二手摩托 车',infoCount:0,pageUrl:'/motor'},{name:'二手汽车求购',infoCount:0,pageUrl:' /ershoucheqg'},{name:'二手汽车转让',infoCount:9,pageUrl:'/ershouche'},{name:'二 手市场',infoCount:0,pageUrl:'/ershoushichang'}]
不知道大家有没有发现这段json对象的问题。这样的写法在js脚本和jquery 1.4之前的版本都是没有问题的。因为在1.3及更早版本中,jQuery通过javascript的eval方法来解析json对象。在1.4 中,jQuery使用了更严格的方法来解析json。所有的内容都必须使用双引号。
这点从jQuery.parseJSON(json) 可以看出,parseJSON在文档中的解释是:
接受一个JSON字符串,返回解析后的对象。
传入一个畸形的JSON字符串会抛出一个异常。比如下面的都是畸形的JSON字符串:
{test: 1} ( test 没有包围双引号)
{'test': 1} (使用了单引号而不是双引号)
另外,如果你什么都不传入,或者一个空字符串、null或undefined,parseJSON都会返回 null 。
凡是字符串都需要用双引号扩起来,数字,null,true,false不用而已
例如:
正确的JSON
字符串:"{\"result\":\"true\", \"msg\":\"删除成功\"}"
错误的JSON字符串:"{result:\"true\", msg:\"删除成功\"}",:"{result:true, msg:删除成功}",:"{result:‘true’, msg:’删除成功'}"
?
服务器返回结果为:{id:"1",data:"none"}
搞了很久,我把库换回1.3.1可以成功~~lol,最后发现是jQuery1.4.2这个版本引起的,1.4.2中jq把JSON的解析由原来的eval改为极其严格的$.parseJSON()来处理了。我在官方的说明文档中找到的,如下:
http://api.jquery.com/jQuery.ajax/
就是说 jQuery 1.4对服务端返回的JSON 数据要求比较严格,必须严格按照JSON的标准来了。
下面我把$.parseJSON的说明文档也摘要下来:
Passing in a malformed JSON string will result in an exception being thrown. For example, the following are all malformed JSON strings:
{test: 1} (test does not have double quotes around it). 译:test两边必须有双引号 {"test":1}
{'test': 1} ('test' is using single quotes instead of double quotes). 译:test两边的引号不能为单引号,一定要是双引号
Additionally if you pass in nothing, an empty string, null, or
undefined, 'null' will be returned from parseJSON. Where the browser
provides a native implementation of JSON.parse, jQuery uses it to parse
the string. For details on the JSON format, see http://json.org/
.
现在什么都讲究标准啦,我们老老实实按标准来吧。我下面列举几个符合标准的例子:
{"myvalue":1}
{"myvalue":"red"}
{"myvalue":["black",250]}
?
?
一些错误代码:
1xx-信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。
100-继续。
101-切换协议。
2xx-成功
这类状态代码表明服务器成功地接受了客户端请求。
200-确定。客户端请求已成功。
201-已创建。
202-已接受。
203-非权威性信息。
204-无内容。
205-重置内容。
206-部分内容。
3xx-重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
301-对象已永久移走,即永久重定向。
302-对象已临时移动。
304-未修改。
307-临时重定向。
4xx-客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。
401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示:
401.1-登录失败。
401.2-服务器配置导致登录失败。
401.3-由于ACL对资源的限制而未获得授权。
401.4-筛选器授权失败。
401.5-ISAPI/CGI应用