web前端面试之ajax

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对象实例变量是较为可靠的一种方式。 

 

你可能感兴趣的:(web前端面试题,javascript)