这是一个基本的例子,你确实有测试readyState
状态。如果我记得不错,在发送请求之前设置事件函数也是比较安全的(不太确定)。
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
//do something with this.responseText
}
};
xhr.open("POST", url, true);
xhr.send();
编辑: 这就是为什么我使用的框架,对旧浏览器支持的原因之一,但这不是一个答案。更准确地说,在过去(现在),浏览器用来实现奇特的功能。很长一段时间我没有直接使用XHR对象,上次使用加载栏(canvas)进行文件上传。它向你展示了处理一些东西的基本方法。这是更长,有点老式,但是,它的工作原理。
function customXHR(){
if(window.XMLHttpRequest){
return new window.XMLHttpRequest;
}else{
try{ //the weird ones
return new ActiveXObject("MSXML2.XMLHTTP.3.0");
}
catch(ex){
return null;
}
}
}
var xhr = customXHR(), pleaseStop = false, startDraw = false;
if(xhr){
xhr.addEventListener('load', function(e){
var jsonRep;
if(!pleaseStop){
//did use a JSON response
jsonRep = $.parseJSON(e.target.responseText);
//do the rest, we finished
}
}, false);
xhr.addEventListener('error', function(e){
//error
pleaseStop = true;
}, false);
xhr.upload.addEventListener('progress', function(e){
//why not let this as an example!
//file_size must be retreive separately, i fear
if(e.lengthComputable && file_size > 0 && !pleaseStop && startDraw){ draw_progress(e.loaded/file_size); }
}, false);
xhr.addEventListener('loadstart', function(e){
//can be used too
}, false);
xhr.addEventListener('readystatechange', function(e){
if(e.target.status == 404 && !pleaseStop){
//error not found
pleaseStop = true;
}
if(e.target.readyState == 2 && e.target.status == 200){
startDraw = true;
}
/*if(e.target.readyState == 4){
//not used here, actually not exactly the same as 'load'
}*/
}, false);
xhr.open("POST", url, true);
xhr.send();
} //else no XHR support
Onreadystatechange并不一定表示它在触发它时完成了吗? – apokryfos
是否有任何错误或消息弹出在Firefox的开发工具控制台? – k0pernikus
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange似乎表明获得响应文本的另一种方式。 – apokryfos