我正在发出一个AJAX请求,该请求会foo使用服务器的响应来更新变量()的值。这是我正在使用的代码:
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:"。
"New value:"
这是一个演示问题的JSFiddle:http : //jsfiddle.net/GGDX7/
为什么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,成功处理程序尚未触发。由于是成功处理程序重新分配了变量,因此其值仍为空字符串。
事件的时间表如下所示:
foo = "New value:" + this.responseText;
由于我们要foo 在 更改 后 提醒警报的值,因此解决方案是将警报放入成功回调中。
现在,它将在收到AJAX响应后执行。