XMLHttpRequest.onreadystatechange.readyState一直是1解决的一些方法

关于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的不熟悉吧,遇到问题就一味地进行了百度之类的搜索,没有自己真正细心地去了解下逻辑,而且这个方法只是个人解决了问题,感觉如果有哪个是遇到类似问题的,或者有遇到相关问题的可以参考下,本人表达能力有限,上面如有表述错误请不吝指正,谢谢,分享快乐。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值