AJAX响应数据未保存到全局范围?
我有下面显示的行没有将变量存储到全局范围的问题:
var somedata; $.ajax({ cache: false, url: verification_url, success: function(data){ somedata = data; } }); alert(somedata); // Undefined
我究竟做错了什么? 我需要将其包装成单独的function还是什么?
alert()
代码在收到$.ajax
的响应之前运行。
这就是它undefined
的原因。
var somedata; $.ajax({ cache: false, url: verification_url, success: function(data){ somedata = data; alert( somedata ); // 2. this will occur after the response is received } }); alert(somedata); // 1. this will occur first
在这里,您可以看到警报无序发生。 默认情况下,AJAX请求不会阻止后续代码运行。
这就是拥有回调方法的全部目的。 它是一种在适当的时间调用的方法,而不是依赖于同步执行。
AJAX是异步的。 这就是A
代表的首字母缩略词。 您只能在成功回调中访问结果:
$.ajax({ cache: false, url: verification_url, success: function(data){ // HERE AND ONLY HERE YOU HAVE THE RESULTS // So it is here that you should manipulate them alert(data); } }); // this line is executed MUCH BEFORE the success callback // and the server hasn't yet sent any response.
因此,任何需要操作结果的代码都必须放在成功回调内或从成功回调中调用的函数中。 你不应该依赖于这种模式的全局状态。