我有一个简单的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,在这个阶段,它什么都不是。
如果我需要用未来值做出回应,似乎第一个版本更可取。
谢谢大家。