javascript - XMLHttpRequest 和绑定(bind)回调不起作用

标签 javascript ajax callback xmlhttprequest function-binding

我有一个简单的 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 调用的响应。

我有两个调用回调的版本:

  1. 版本 1 只是在事件处理函数中调用回调。
  2. 版本 2 使用 bind 来做同样的事情; this 设置为 xhr 对象,而 xhr.response 作为参数发送。

当我使用版本 1 时,一切都按预期工作。当我使用版本 2 时,data 参数为空。

我以为我对 XMLHttpRequest.bind() 相当了解,但我不知道为什么第二个版本是空的。这里发生(未)发生什么?

评论

多亏了这些答案,我想我明白了。

.bind() 会立即使用 xhr.responseText当前值执行,在这个阶段,它什么都不是。

如果我需要用 future 值进行响应,那么第一个版本似乎更可取。

谢谢大家。

最佳答案

因为callback.bind会被立即执行。并且在执行时,xhr.responseText 显然不可用,因为请求尚未完成。您可以试试看结果。

function doit(data) {
    alert(data, this.responseText);
}

关于javascript - XMLHttpRequest 和绑定(bind)回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734607/

相关文章:

javascript - 如何在 ExtJS Tabpanel 中显示 JSON 表单字段?

php - AJAX 过滤器操作 DOM 后,单击事件不会触发

javascript - 在 NodeJS 中使用嵌套回调时遇到问题

node.js - mongoose.model.find(callback) - 它是如何工作的?

android - 如何使用 Retrofit 发送带值的 Hashmap

javascript - javascript摇动浏览器屏幕的效果

javascript - 使用javascript测量多边形的圆度给出了错误的数字

javascript - 如何在 JQuery/Javascript 中检测点击的 href URL

javascript - 为 AJAX 请求进行回调以将响应返回给调用者

javascript - 使用 javascript/Jquery 进行 Ajax