0
在Google搜索示例之後,我發現所有示例都使用匿名函數,如下所示。但我想避免它,因爲它使代碼變得複雜。XMLHttpRequest異步讀取,如何不使用匿名函數?
var xhr = new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
xhr.open(method, url, true);
xhr.onreadystatechange = function() {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send();
如果我想這樣做,我該如何傳遞請求或響應?
function startRequest()
{
var xhr = new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
xhr.open(method, url, true);
xhr.onreadystatechange = myhandler;
xhr.send();
}
function myhandler()
{
//how to get xhr here?
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200)
{
console.log(xhr.responseText);
}
}
我對靜態類型語言比較熟悉,所以JavaScript很混亂。我試圖查看onreadystatechange的簽名(輸入參數),但文檔頁面沒有提及它。似乎動態類型語言(Python,PHP)的文檔往往不會正式描述輸入參數,所以我不得不猜測這些方法需要什麼類型的參數。
它沒有參數,我應該使用全局變量將請求和響應傳遞給myhandler
?有沒有更好的辦法?
使用'this'。它將引用請求對象。 (因爲'myHandler'是作爲請求的狀態改變事件監聽器傳遞的)。 –
您也可以將'myHandler'定義放入'startRequest'中,然後它將在變量的範圍內。 – Barmar