AJAX响应数据未保存到全局范围?

时间:2011-07-13 18:50:57

标签: jquery ajax scope

我遇到了下面显示的行没有将变量存储到全局范围的问题:

var somedata;

$.ajax({
    cache: false,
    url: verification_url,
    success: function(data){
        somedata = data;
    }
});

alert(somedata); // Undefined

我做错了什么?我是否需要将其包装成单独的函数或什么?

2 个答案:

答案 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.

因此,任何需要操作结果的代码都必须放在成功回调内或从成功回调中调用的函数中。你不应该依赖于这种模式的全局状态。