jQuery Ajax成功变量

Ale*_*tau 1 javascript php ajax jquery

我有下一个功能.我的PHP脚本返回一个数组,error其值为'ERR':

var updatePaymentType = function(plan_pt_id, pt_id){
    var error = null;
    var data = new Object()
    data["function"]             = "update";
    data["payment_type_id"]      = pt_id;
    data["plan_payment_type_id"] = plan_pt_id;
    data["data"]            = $("#saveform").serializeArray();
    $.ajax({
        type: "POST",
        url: "<?=ROOT_PATH?>/commission/plan/edit/id/<?=$this->editId?>",
        data: data,
        dataType: "json",
        success : function (data)
        {
            error = data['error'];
            alert(error); // All works. Output ERR
        }
    });
    alert(error); // Not work. Output null
    return error;
};
Run Code Online (Sandbox Code Playgroud)

我的函数应该返回一个错误.但它回来了null.非常感谢你.

Nic*_*ver 6

AJAX请求是异步的,这意味着直到您已经返回之后才会设置该值(success处理程序稍后运行,当服务器响应数据时).

返回错误类型,您必须使其同步,async: false如下所示:

$.ajax({
    async: false,
    type: "POST",
    ...
Run Code Online (Sandbox Code Playgroud)

但这会锁定浏览器,最好调用任何使用success回调值的内容,如下所示:

    success : function (data)
    {
        var error = data['error'];
        functionThatTakesError(error);
    }
Run Code Online (Sandbox Code Playgroud)

  • 这看起来像是问题所在.为了进一步解释,ajax中的"a"代表异步,这意味着您的代码在继续执行之前不会等待http请求返回.在这种情况下,您的return语句将在ajax请求返回值之前很久执行,使您的外部函数无法从服务器返回该值.通过使用回调,您可以避免这种情况,并在从服务器返回后立即将值传递给正确的方法:-) (2认同)