关于XMLHttpRequest对象触发了onreadystatechange后返回的状态readyState一直都是1的一些解决方法。
先贴上一些出错的相关代码:
function createXMLHttpRequest() {
if (window.XMLHttpRequest) {
// Mozilla
xhr = new XMLHttpRequest();
} else {
// IE
if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
}
}
}
}
}
function a() {
<span style="white-space:pre"> </span>createXMLHttpRequest();
var url = "xxx.xxx?xx=xx&xx=xx";
xhr.open("GET", url);
// 如果用GET方法要发送空的参数;
xhr.send(null);
// 有资料说onreadystatechange后面跟的回调函数名带有参数的时候readyState状态值会一直停留在1
// onreadystatechange=updatepage();这样带有两个括号的写法也会导致这个错误,这个是网上查找到的一个解决办法,但是没效果
xhr.onreadystatechange = function() {
if (4 == xhr.readyState) {
if (200 == xhr.status) {
var responseText = xhr.responseText;
// handle the response;
// b();
}
}
};
}
function b() {
createXMLHttpRequest();
xhr.open("POST", "url");
// 网上说open之后要添加下列代码
// xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); can't have
// 但是个人测试了不需要也可以顺利运行,加了反而会出现问题
xhr.send(content);
}
在同一个html文件中,上面的a和b函数是同时异步执行的,这样我得到的结果b函数可以得到4==readyState的结果,而a函数中的readyState就一直是1;开始我以为是服务端那边出了什么问题,或者处理完成后没有正确返回,但是后来知道与服务端没有什么关系。
我遇到的这个问题主要是a函数和b函数的xhr对象的状态属性出现了混乱表现,或者说是在a函数用xhr发送数据后在等待服务端返回状态的时候,b函数的xhr已经进行发送数据了,这时候应该就有可能把a函数的返回状态覆盖掉了,而通过测试也知道了有时候state是4,但是只是在b函数中获得的。
解决这个类似的问题我主要解决方法是把b函数的调用用在a函数内,等到a函数状态返回4后再调用b函数,而且发现这样调用对我的程序有更高的撸棒性。
这个问题我在百度上找了好久,又不怎么会翻墙,所以感觉自己用了大半天才弄明白这个小bug,可以说是本人对js的不熟悉吧,遇到问题就一味地进行了百度之类的搜索,没有自己真正细心地去了解下逻辑,而且这个方法只是个人解决了问题,感觉如果有哪个是遇到类似问题的,或者有遇到相关问题的可以参考下,本人表达能力有限,上面如有表述错误请不吝指正,谢谢,分享快乐。