ajax请求时,如何解释json数据?
使用eval方法解析的时候,eval():不会去判断该字符串是否合法,而且json对象里的js方法也会被执行,这是非常危险的;
推荐使用JSON.parse(); JSON.parse():把字符串转化成json。
readyState状态码
readyState,是指运行Ajax所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为Ajax运行步骤,使用“ajax.readyState”获得。
readyState是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态。
readyState总共有5个状态值,分别为0~4,每个值代表了不同的含义。
0:未初始化,尚未调用open()方法
1:启动,已经调用open()方法,尚未调用send()方法
2:发送,已经调用send()方法,但尚未收到响应
3:接受,已经接收到部分响应数据
4:完成,已经接收到全部响应数据,而且已经可以在客户端使用了
只要readyState属性的值由一个值变成另一个值,都会触发一次readystatechange
事件。可以利用这个事件来检测每次状态变化后readyState的值。通常,我们只对readyState
值为4的阶段感兴趣,因为这时所有数据都已经就绪。不过,必需在调用open()
前指定onreadystatechange
事件处理程序才能确保跨浏览器兼容性。如下示例:
var xhr= new XMLHttpRequest()
xhr.onreadystatechange=function () {
if (xhr.readyState==4){
if ((xhr.status>=200 && xhr.status<300) || xhr.status==304){
console.log(xhr.responseText)
}else {
console.log("request was unsuccessful:"+xhr.status)
}
}
}
xhr.open("get”,”example.txt”,true)
xhr.send(null);
以上代码利用DOM 0级方法为XHR对象添加了事件处理程序,原因是并非所有浏览器都支持DOM 2级方法。与其他事件处理程序不同,这里没有像onreadystatechange事件处理程序中传递event对象;必须通过XHR对象本身来确定下一步该怎么做,因为如果使用了this对象(onreadystatechange事件处理作用域的问题),在有的浏览器中会导致函数执行失败或者导致错误发生。因此使用实际的XHR对象实例变量是较为可靠的一种方式。