我有一個簡單的get
函數使用XMLHttpRequest
它接受回調參數。計劃是調用onload
事件處理程序的回調。XMLHttpRequest和綁定回調不起作用
下面是一個簡化的版本:
get(url,doit);
function doit(data) {
alert(data)
}
function post(url,callback) {
var xhr=new XMLHttpRequest();
xhr.onload=function() { // Version 1
callback(xhr.response)
}
xhr.onload=callback.bind(xhr,xhr.response); // Version 2
xhr.open('get',url,true);
xhr.send(data);
}
回調函數有一個參數,其中data
應該是從AJAX調用的響應。
我有2個版本調用回調的:
- 1版只是調用事件處理函數裏面回調。
- 版本2使用
bind
來做同樣的事情;this
設置爲xhr
對象,而xhr.response
作爲參數發送。
當我使用版本1時,一切都按預期工作。當我使用版本2時,data
參數爲空。
我以爲我知道XMLHttpRequest
和.bind()
相當不錯,但我不知道爲什麼第二個版本是空的。什麼是(不)發生在這裏?
評論
感謝的答案,我想我有它。
.bind()
與的xhr.responseText
的當前值,其中,在這個階段,沒有什麼立即執行。
看來,如果我需要回應一個未來價值的第一個版本是可取的。
謝謝大家。
當執行'.bind(XHR,xhr.response)'沒有任何響應尚未 - >'xhr.response === undefined' – Andreas