探讨发生问题(状态值)和状态(国家代码)在阿贾克斯
无功getxmlhttprequest =函数(){()
尝试{
主流的浏览器提供了XMLHttpRequest对象 / /
返回新的XMLHttpRequest();
} catch(e){
/ /低版本的IE浏览器不提供XMLHttpRequest对象,IE6
具体实现ActiveX对象 / /你必须使用IE浏览器
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
readyState 0 = > / /初始化1 = >加载2 = 3 = > >加载解析4 = >
/ / console.log(XHR。发生);0
Xhr.open(类型
/ / console.log(XHR。发生);1
Xhr.send();
/ / console.log(XHR。发生);1
xhr.onreadystatechange =函数(){
Console.log (xhr.status); / / //HTTP state
/ / console.log(XHR。发生);234
如果(xhr.readystate = = = = = = 200 { 4 XHR。状态)
警报(XHR。responseText);
}
};
1者之间的差异。阿贾克斯:readyState(状态值)和状态(国家代码)
readyState指几个州通过运行Ajax经验。访问是否成功与否,反应步骤可以理解为Ajax的运行步骤和取得的ajax.readystate。
状态是指Ajax访问成功与否,由服务器返回的HTTP头信息的编码是基于HTTP协议的提交的信息ajax.status获得。
总体理解:很容易理解,国家代表着一种整体状态,而状态是这种大状态下的一种特殊的小状态。
2。发生的是什么
readyState是XMLHttpRequest对象来确定当前的XMLHttpRequest对象是一个属性。
readyState共有5个国家的价值观,这是0 ~ 4,其中每一个代表不同的含义。
0:初始化XMLHttpRequest对象尚未初始化,但
1:加载,XMLHttpRequest对象开始发送请求
2:加载完成,对XMLHttpRequest对象发送请求完成
3:解析、XMLHttpRequest对象开始读取服务器的响应
4:完成,XMLHttpRequest对象读取服务器响应结束
三.是什么状况
现状是XMLHttpRequest对象表示响应的HTTP状态代码的属性
HTTP1.1协议下的HTTP状态代码,可以分为5大类
1xx:信息响应类,代表收到的请求继续处理
2xx:处理成功的反应,表明其作用是成功接收,理解和接受。
3xx:重定向响应类,它必须被进一步处理,以完成指定的动作
4xx:客户端错误,客户端请求有语法错误或不正确的执行
5xx:服务器错误,服务器不能执行正确的请求
100 -客户必须继续提出请求。
101 -客户机请求服务器根据请求转换HTTP协议版本。
200 -交易成功
201 -提示新文件的URL
202 -接受和处理,但未完成的处理
203 -返回信息不确定或不完整
204 -收到请求,但返回信息为空
205 -服务器已经完成了请求,用户代理必须重置已经浏览过的文件。
206 -服务器已经完成了一些用户GET请求。
300 -所请求的资源可以在多个地方获得。
301 -删除请求数据
302 -在其他地址查找请求数据
303 -建议客户访问其他URL或访问方法
304 -客户端已经执行get,但是文件没有改变。
305 -所请求的资源必须从服务器指定的地址获得。
306 -在以前版本的HTTP中使用的代码,不再在当前版本中使用
307 -临时删除请求的资源
400错误的请求,如语法错误
401 -请求授权失败
402保留有效的为头的响应
403 -请求是不允许的。
404 -找不到文件、查询或URL
405 -不允许用户在请求行字段中定义的方法
406 -基于用户发送的拒绝拖动不能访问请求资源
407 -类似于401,用户必须首先在代理服务器上得到授权。
408 -客户机在用户指定的饥饿时间内没有完成请求。
409 -无法为当前资源状态完成请求
410 -服务器上没有更多的资源,没有更多的引用地址。
411 -服务器拒绝用户定义的内容长度属性请求
412 -一个或多个请求头字段在当前请求中是错误的
413 -所请求的资源大于服务器允许的大小。
414 -所请求的资源URL长于服务器的长度。
415请求资源不支持请求项目格式。
416 -请求包含范围请求头字段,在当前请求资源范围内没有范围指示值,并且请求不包含if范围请求头字段。
417 -服务器不符合请求头字段中指定的期望值。如果是代理服务器,则可能是下一级服务器不能满足请求。
500 -服务器产生内部错误。
501 -服务器不支持请求的函数
502 -服务器暂时不可用,有时为了防止系统过载。
503 -服务器过载或暂停维护
504 -网关过载,服务器用另一个网关或服务响应用户,等待时间设置为更长的值。
505 -服务器不支持或拒绝请求标头中指定的HTTP版本。
4。思考:为什么同时onreadystatechange函数实现readyState状态吗
第一种解释:只使用readyState
无功getxmlhttprequest =函数(){()
如果(窗口。XMLHttpRequest){
返回新的XMLHttpRequest();
}
如果(窗口。ActiveX对象){
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
Xhr.open(
Xhr.send();
xhr.onreadystatechange =函数(){
如果(xhr.readystate = 4){
警报(XHR。responseText);
}
};
服务的响应是错误的,但它仍然返回信息,这不是我们想要的结果。
如果返回的不是200,而是404或500,因为它仅使用readyState做出判断,它忽略了200, 404或500的结果。如果响应是成功的,它将执行下一个Javascript代码,结果会导致各种不可预见的错误。所以这是不可能使用readyState只判断。
第二种思维方式:仅用状态判断
无功getxmlhttprequest =函数(){()
尝试{
返回新的XMLHttpRequest();
} catch(e){
返回新的ActiveX对象(微软。XMLHTTP );
}
};
VaR XHR = getxmlhttprequest();
Xhr.open(
Xhr.send();
xhr.onreadystatechange =函数(){
如果(xhr.status = 200){
警报(发生+ xhr.readystate + XHR。responseText);
}
};
事实上,结果并不像预期的那样,响应代码确实返回了200,但是总共弹出了3个窗口!第一个是readyState = 2窗口,二是发生3个窗口,和第三的发生4.from这个窗口,我们可以看到,onreadystatechange函数执行不触发只有当readyState改到4,但是发生(2, 3, 4)将触发每一个变化,每一次。可以看出,使用状态是不可行的。
5。从以上的实验,我们可以知道,当判断readyState和地位是不可或缺的。因此将发生和状态序列产生影响呢我们可以转移到状态在第一判断前,代码如xhr.status xhr.readystate 4 = = = = 200 = =
事实上,这对最终结果没有影响,但在中间的表现是不同的。从实验中,我们知道,每一个变化都会触发onreadystatechange函数readyState。如果我们首先判断情况,我们会判断状态一次。虽然对性能影响不大,你还是应该坚持极端代码追求的理念将发生的判断,在它的前面。
xhr.readystate xhr.status = 200 = 4
以上介绍的是萧边探讨的问题发生问题(状态值)和状态(状态码)在Ajax,我希望它能帮助你。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。