jQuery AJAX。返回值未定义?

Kod*_*.Me 0 javascript ajax jquery

我有那个代码:

var s, d, p = '';

$.ajax(
    {
        type: "POST",
        url: ajaxurl,
        data: {action: "get_info"},
        success: function(r)
        {
            // r contain that json data
            // {"s":"long-string","d":"string","p":"string"}
            // That served from the server with that header
            //
            // header('Cache-Control: no-cache, must-revalidate'); 
            // header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
            // header('Content-type: application/json');

            d = r.d;
            s = r.s;
            p = r.p;
        }
    }
);

// And here console return s as undefined
console.log(s);
Run Code Online (Sandbox Code Playgroud)

知道出了什么问题吗?

njr*_*101 5

$.ajax()调用只是启动 ajax 操作。然后代码会执行您的console.log语句,但 ajax 调用尚未返回。因此 的值s尚未确定。

在稍后的某个时刻,ajax 调用会返回您的结果,此时您的回调将被触发。因此,如果您想引用返回的值,则应该引用s回调内的变量。

更好的方法通常是这样的:

$.ajax(
    {
        type: "POST",
        url: ajaxurl,
        data: {action: "get_info"},
        success: function(r)
        {

            s = r.s;

            // Do something with s here...
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

如果您确实需要,您可以s在回调之外引用,但如果这样做,您需要采取某种机制来确保它s已经初始化(即您的 ajax 调用已经返回)。这引入了其他复杂性,例如同步和错误处理,并且可能使您的程序流程相当不可靠。