我有一个简单的get
函数使用XMLHttpRequest
它接受一个回调参数。onload
计划是在事件处理程序上调用回调。
这是一个简化版本:
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
,在这个阶段,它什么都不是。
如果我需要用未来值做出回应,似乎第一个版本更可取。
谢谢大家。