ajax异步处理多个请求是出现的问题,例如连续的两个输入框,两个都要通过计算获取相应的值,当离开第一个输入框的时候,执行第二个输入框的时候出现了问题,都到了并不是需要的值,只是暂时解决这种问题,把异步换成了同步。然后找了些资料,然来是XMLHttpRequest 设置了全局变量,多次请求的时候每个请求都要用到这个对象,ajax又是异步的,无法事先确定哪个先后。
原来:
function getXMLHttpRequest(){
var xmlHttpRequest = null;
if (window.XMLHttpRequest) {
xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlHttpRequest;
}
functiong getXXX(){
xmlHttpRequest = getXMLHttpRequest();
xmlHttpRequest.onstatechange = handleResponse;
xmlHttpRequest.open("GET", "url", null);
xmlHttpRequest.send();
}
function handleResponse(){
if(xmlHttpRequest.readyState != 4) return;
if(xmlHttpRequest.status == 200){
var xml = xmlHttpRequest.responseXML;
}
}
修改后,把XMLHttpRequest 设置了局部变量
function getXMLHttpRequest(){
var xmlHttpRequest = null;
if (window.XMLHttpRequest) {
xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlHttpRequest;
}
functiong getXXX(){
xmlHttpRequest = getXMLHttpRequest();
xmlHttpRequest.onstatechange = handleResponse.setThis(xmlHttpRequest);
xmlHttpRequest.open("GET", "url", null);
xmlHttpRequest.send();
}
Function.prototype.setThis(){
var curr_function = this;
var to_this_object = arguments[0];
return function(){
curr_function.apply(to_this_object, []);
};
}
function handleResponse(){
if(xmlHttpRequest.readyState != 4) return;
if(xmlHttpRequest.status == 200){
var xml = xmlHttpRequest.responseXML;
}
}
ps:这是刚用ajax出现的问题,现在ajax框架有很多了,用起来也比较方便,不用这么繁琐