的差异和使用jQueryAJAXreadyState和地位
jQuery ajax函数的源代码如下所示:
无功getxmlhttprequest =函数(){()
如果(窗口。XMLHttpRequest){
主流的浏览器提供了XMLHttpRequest对象 / /
返回新的XMLHttpRequest();
}
如果(窗口。ActiveX对象){
/ /低版本的IE浏览器不提供XMLHttpRequest的对象
具体实现ActiveX对象 / /你必须使用IE浏览器
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
xhr.onreadystatechange =函数(){
如果(xhr.readystate = = = = = = 200 { 4 XHR。状态)
术后成功/
/ /数据xhr.responsetext
}
};
Xhr.open(类型
Xhr.send();
发生的是什么
readyState是XMLHttpRequest对象来确定当前的XMLHttpRequest对象是一个属性。
readyState共有5个国家的价值观,这是0 ~ 4,其中每一个代表不同的含义,如下表所示:
0未初始化的状态:在这一点上,一个XMLHttpRequest对象被创建
1、准备发送状态:此时,XMLHttpRequest对象的方法打开已被调用,和XMLHttpRequest对象是准备发送一个请求到服务器端。
2已经发送状态:此时,一个请求已通过发送方法发送到服务器,但尚未收到响应。
3是接收状态:此时,HTTP响应头信息已被接收,但消息正文部分未被完全接收。
4完整响应状态:此时,HTTP响应已收到
是什么状况
现状是XMLHttpRequest对象表示响应的HTTP状态代码的属性。
HTTP1.1协议下的HTTP状态代码,可以总共分为5类,如下表所示:
1xx服务器接收请求并需要继续处理。例如,101状态代码表示服务器将通知客户端使用更高版本的HTTP协议。
2xx请求成功。例如,200状态代码表明响应头或数据体,请求将返回此响应。
3xx重定向。例如,302状态代码,这是一个临时的重定向,请求将包含一个新的URL地址,和客户端将请求到新地址。
4xx客户端错误。例如,404状态代码表示客户端请求的资源不存在。
的5xx服务器是错误的。例如,500状态代码表示服务器遇到意外情况,导致完成响应失败。一般来说,当代码出错时,这个问题就会出现。
问题抛
为什么在同一时间onreadystatechange函数实现readyState状态吗
我们知道,发生= = 4表示响应请求是成功的,为什么呢有了这个问题,让我们开始一些实验。
只使用readyState判断
Javascript结束的实现代码如下所示:
无功getxmlhttprequest =函数(){()
如果(窗口。XMLHttpRequest){
返回新的XMLHttpRequest();
}
如果(窗口。ActiveX对象){
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
xhr.onreadystatechange =函数(){
如果(xhr.readystate = 4){
警报(XHR。responseText);
}
};
Xhr.open(
Xhr.send();
我们在服务器端抛出异常:
公共部分类数据:system.web.ui.page
{
protected void page_load(object sender,EventArgs e)
{
抛出新的异常(错误);
}
}
运行Javascript代码,提示窗口如下所示:
服务的响应是错误的,但它仍返回信息,这不是我们想要的结果。打开提琴手的控制,你可以看到data.aspx返回一个500响应,但由于只有发生进行判断的使用,忽视结果返回到500或200,只要作为响应返回,接下来的Javascript代码的实现,其结果将导致不可预知的错误。所以这是不可能使用readyState只判断。
另一种思维方式是,如果状态代码返回到200,则表示响应成功。可以使用readyState不是使用状况做出判断好吧,带着这个问题,继续做实验。
仅用状态判断
Javascript代码的代码实现如下:
无功getxmlhttprequest =函数(){()
如果(窗口。XMLHttpRequest){
返回新的XMLHttpRequest();
}
如果(窗口。ActiveX对象){
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
xhr.onreadystatechange =函数(){
如果(xhr.status = 200){
警报(发生+ xhr.readystate + XHR。responseText);
}
};
Xhr.open(
Xhr.send();
事实上,结果并不像预期的那样,响应代码确实返回了200,但是总共弹出了3个窗口!第一个是readyState = 2窗口,二是发生3test窗口,和第三的发生4test.from这个窗口,我们可以看到,onreadystatechange函数执行不触发只有当readyState改到4,但这一变化将触发发生。它可以可以看出,使用状态是不可行的。
进一步的思考
从以上的实验,我们可以知道,当判断readyState和地位是不可或缺的。因此将发生和状态序列产生影响呢我们可以转移到状态在第一判断前,代码如xhr.status xhr.readystate 4 = = = = 200 = =。
事实上,这对最终结果没有影响,但在中间的表现是不同的。从过去的实验中,我们知道,每一个变化触发onreadystatechange函数readyState。如果我们首先判断情况,我们会判断状态一次。虽然性能是非常小的,但我们仍然应该持有极端代码追求的理念,在审判前发生。
以上是不同的,详细的讲解了jQuery的Ajax readyState状态经萧边介绍,希望能对你有帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。