0
請參閱下面的代碼。當請求被髮送並返回OK時,在reqListener()
函數中,我得到了我的文本文件輸出的內容。如何使用AJAX請求乾淨地獲取文本文件
但是,當我嘗試稍後返回響應變量時,它仍然未定義,就好像reqListener()
還沒有被調用。這可能是由於async=true
的說法?
此外,是否有一個更好的方式來獲取響應文本的功能,如果它的請求成功,就像使用閉包?
function load_text_file()
{
function reqListener() {
if (this.readyState == 4 && this.status == 200)
{
response = this.responseText;
console.log(response);
}
}
var response;
var oReq = new XMLHttpRequest();
oReq.onreadystatechange = reqListener;
oReq.open("get", "file.txt", true);
oReq.send();
return response;
}
var TEXT = load_text_file();
console.log(TEXT);
問題是,load_text_file()在文件加載前返回。當請求實際完成時,你的函數reqListener被調用。所以,程序流程就像這樣。 (1)請求文件(2)從proc返回,沒有結果,所以響應未定義。 (3)console.log(TEXT) - 響應尚未返回。 (4)請求完成後,console.log(響應)現在具有要顯示的有效數據。 – enhzflep 2013-05-11 11:17:30
AJAX =異步。你的函數在加載前返回。重新考慮你的結構。 – Dave 2013-05-11 11:17:56
我不知道該怎麼做。我不能將'reqListener'的輸出分配給任何東西,因爲我不知道'onreadystatechange'何時會發生。我的意思是,我可以有一個全局變量TEXT,然後將TEXT分配給'reqListener()'中的'reponseText',但是那個函數依賴於一些看起來很糟糕的外部變量。 – njp 2013-05-11 11:50:48