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

Ind*_*ial 4 ajax jquery scope

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

var somedata;

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

alert(somedata); // Undefined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我需要将其包装成单独的功能还是什么?

use*_*716 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
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到警报无序发生.默认情况下,AJAX请求不会阻止后续代码运行.

这就是拥有回调方法的全部目的.它是一种在适当的时间调用的方法,而不是依赖于同步执行.

  • @Industrial:依赖于成功响应的任何代码都需要位于`success:`回调中,或者位于`success:`回调中调用的函数中. (3认同)

Dar*_*rov 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.
Run Code Online (Sandbox Code Playgroud)

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