首页 > 解决方案 > 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"]。我究竟做错了什么?

标签: javascriptajax

解决方案


由于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);
});

推荐阅读