我遇到了下面显示的行没有将变量存储到全局范围的问题:
var somedata;
$.ajax({
cache: false,
url: verification_url,
success: function(data){
somedata = data;
}
});
alert(somedata); // Undefined
我做错了什么?我是否需要将其包装成单独的函数或什么?
答案 0 :(得分:11)
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请求不会阻止后续代码运行。
这就是拥有回调方法的全部目的。这是一种在适当的时间调用的方法,而不是依赖于同步执行。
答案 1 :(得分:5)
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.
因此,任何需要操作结果的代码都必须放在成功回调内或从成功回调中调用的函数中。你不应该依赖于这种模式的全局状态。