You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

封装AJAX函数的回调参数无法正常读取arg.response属性问题

问题原因

你的代码核心错误是AJAX回调的绑定逻辑写错了:

  • 你写的_xhttp.onload = lambda(_xhttp)是立刻执行lambda函数,把执行返回值赋值给onload事件,而不是把lambda作为回调函数绑定到onload事件上。
  • 执行时机上,lambda是在send()之后立刻同步运行的,此时异步GET请求还没收到服务端返回,response属性自然是空值。
  • 你直接打印arg对象能看到response属性,是因为浏览器控制台的对象打印是惰性求值:控制台只保存对象的引用,你手动点开对象展开属性时,异步请求已经完成,response已经被赋值,所以能看到最新的属性值,但同步代码执行时读取的response确实是空的。

修复方法

把onload的绑定逻辑改成把lambda作为事件回调即可,两种写法可选:

  1. 用匿名函数包裹回调调用
function doAjax(param, lambda) {
    let _xhttp = new XMLHttpRequest();
    _xhttp.open("GET", param, true);
    _xhttp.send();
    // 等onload事件触发时再执行lambda
    _xhttp.onload = function() {
        lambda(_xhttp);
    };
}
  1. 用bind方法绑定入参
_xhttp.onload = lambda.bind(null, _xhttp);

修改完成后即可正常读取到arg.response的值。

内容的提问来源于stack exchange,提问作者Jurby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:03