jQuery AJAX返回值不确定吗?

问题描述

$.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...
        }
    }
);

如果确实需要,则可以s在回调之外进行引用,但如果需要,则需要放置某种机制以确保s已初始化(即,您的ajax调用已返回)。这引入了其他复杂性,例如同步和错误处理,并且可能使程序流程变得不可靠。

解决方法

我有该代码:

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);

有什么问题的想法吗?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...