javascript - AJAX 响应未分配给变量
问题描述
我正在使用此代码来获取data.dat的内容。以下是文件:
main.js
function getData() {
var result;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
result = this.responseText.split(",");
}
};
xhttp.open("POST","data.dat",true);
xhttp.send();
return result;
}
数据.dat
A,B,C
但是,getData()
返回一个空字符串。当我以这种方式登录时this.responseText
:
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
result = this.responseText.split(",");
}
我明白了["A","B","C"]
。我究竟做错了什么?
解决方案
由于AJAX
代表Asynchronous JavaScript And XML,因此您正在使用异步调用来获得所需的输出。问题是该return result
语句在您的通话完成之前返回AJAX
,这就是您收到空结果的原因。
你应该使用一个callback
函数。
function getData(callback) {
var result;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
result = this.responseText.split(",");
callback(result);
}
};
xhttp.open("POST","data.dat",true);
xhttp.send();
}
getData(function(result){
console.log(result);
});
推荐阅读
- jquery - jQuery - 将标签附加/删除到每个项目的列表
- python-3.x - 在 python 中使用 google api 创建问题时,问题 ID 不为空
- android - IllegalStateException:无法将 SemanticsComponentNode 转换为视图
- python - 如何让精灵出现在 pygame 窗口上
- sql - PostgreSQL 在所有情况下都左连接横向输出
- react-native - 如何将组件放置在文本行的末尾
- python - 了解单链接队列函数的实现
- sql - IIS 委派突然停止工作 Windows Server 2016 运行 SqlPackage.exe 到 SQL Server 2017
- python - 如何在 pygame 中对透明图像进行 blit 以制作 alpha“剪切”
- python - 无法创建在 Python 中查找文本字符串的列