這是一個基本的例子,你確實有測試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