javascript - 将 AJAX 作为自己的参数的函数作为函数参数的问题
问题描述
我可以 console.log(arg) 但不能 arg.response。好奇//编辑背后的原因是什么:当我控制台日志 arg 时,我可以清楚地看到带有数据的响应属性
function doAjax(param, lambda) {
let _xhttp = new XMLHttpRequest();
_xhttp.open("GET", param, true);
_xhttp.send();
_xhttp.onload = lambda(_xhttp);
}
doAjax("ALL_FRAMES", function(arg) {
console.log(arg.response); --> prints blank field in console
//allFrames = JSON.parse(arg.response);
});
解决方案
_xhttp.onload = lambda(_xhttp);
这意味着“lambda(_xhttp)
立即调用,然后将其返回值分配给_xhttp.onload
”。相反,您想将一个函数分配给onload
,该函数lambda
稍后将调用:
_xhtttp.onload = () => lambda(_xhttp);
// 编辑:当我控制台记录 arg 时,我可以清楚地看到带有数据的响应属性
这只是开发工具处理日志对象方式的一个怪癖。记录对象时,在您单击开发工具中的对象之前,不会评估该对象。因此,在console.log
运行时它还没有响应,但是当您单击时,它确实有响应。
推荐阅读
- python - TypeError:绘图不可用(Google Colab)
- android - 确保 Android 屏幕锁定已持续启用
- sql - 在 SQL Server 中将列中的数据转换为行
- python - 无法在 python DataFrame 中的索引中删除重复项
- java - 在由 Lisp 应用程序创建的 Java 源代码上,从 Common Lisp 应用程序调用 Java 编译器
- php - 为什么 PHP try...catch (Exception) 不能捕获 Yii2 应用程序中 inconv() 引发的异常?
- c# - 如何将我自己的内容添加到我的 umbraco 页面?
- javascript - 视频轨道没有来自 Navigator.mediaDevices.getSupportedConstraints() 的功能
- jquery - Bootstrap - 无法读取未定义的属性“fn”
- java - Citrus 框架:接收超时时不失败测试