小编典典

AJAX不更新变量

ajax

jQuery的

我正在发出一个AJAX请求,该请求会foo使用服务器的响应来更新变量()的值。这是我正在使用的代码:

//## My variable ##

var foo = "";


//## Send request ##

$.ajax({
    url: "/",
    dataType: "text",
    success: function(response) {
        foo = "New value:" + response;
    },
    error: function() {
        alert('There was a problem with the request.');
    }
});


//## Alert updated variable ##

alert(foo);

问题是的值foo仍然是一个空字符串。我知道这不是服务器端脚本的问题,因为我会收到错误警报,或者至少得到string "New value:"

这是一个演示问题的JSFiddle:http :
//jsfiddle.net/GGDX7/

为什么foo不变的价值?


纯JS

我正在发出一个AJAX请求,该请求会foo使用服务器的响应来更新变量()的值。这是我正在使用的代码:

//## Compatibility ##

var myRequest;
if (window.XMLHttpRequest) {
    myRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    myRequest = new ActiveXObject("Microsoft.XMLHTTP");
}


//## My variable ##

var foo = "";


//## Response handler ##

myRequest.onreadystatechange = function() {
    if (this.readyState === 4) {
        if (this.status === 200) {
            foo = "New value:" + this.responseText;
        } else {
            alert('There was a problem with the request.');
        }
    }
};


//## Send request ##

myRequest.open('GET', "response.php");
myRequest.send();


//## Alert updated variable ##

alert(foo);

问题是值的值foo保留为空字符串。我知道这不是服务器端脚本的问题,因为我会收到错误警报,或者至少得到string "New value:"

这是一个演示问题的JSFiddle:http :
//jsfiddle.net/wkwjh/

为什么foo不变的价值?


阅读 237

收藏
2020-07-26

共1个答案

小编典典

当您提醒的值时foo,成功处理程序尚未触发。由于是成功处理程序重新分配了变量,因此其值仍为空字符串。

事件的时间表如下所示:

  1. foo 被分配空字符串
  2. 创建并调度了AJAX请求。
  3. 的值foo被警告。(请注意,foo尚未更改)
  4. AJAX请求完成。
  5. foo = "New value:" + this.responseText;

由于我们要foo 更改 提醒警报的值,因此解决方案是将警报放入成功回调中。

现在,它将在收到AJAX响应后执行。

2020-07-26