3

这些天我一直在做一些 ajax 功能,我面临一个小问题。我有一个调用 ajax 的函数。我想给它一个值,并在请求完成时返回该函数。我该怎么做:

  • 触发ajax子函数的返回
  • 等待“answer” var 改变,然后返回

这是精神(确实,它行不通):

var answer = null;
    $.ajax({
        url: "validate/"+id,
        type: 'POST',
        data: {'field' : value},
        success: function(data) {
            //noty({text: data, type: 'success'});
        },
        error:function (xhr, ajaxOptions){
            noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
            answer = "error";
        } 
    });

return answer;

谢谢!

4

2 回答 2

4

您不能return从 AJAX 函数中取值,因为 AJAX 请求是异步发生的(想想检索远程网页需要多长时间)。

相反,您需要提供一个回调(请求完成时执行的函数):

function ajaxFunction(onComplete) {
    $.ajax({
        url: "validate/"+id,
        type: 'POST',
        data: {'field' : value},
        success: function(data) {
            //noty({text: data, type: 'success'});
            onComplete(data);
        },
        error:function (xhr, ajaxOptions){
            noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
            onComplete(error);
        }
    }
}

然后将一个函数作为参数传递给ajaxFunction,它将接收来自 AJAX 请求的响应。

ajaxFunction(function (answer) {
    // do something with answer
});

当您需要一个idvalue参数时,您可以将它们添加到ajaxFunction方法的参数中。

于 2012-06-19T13:51:02.323 回答
0

使用async: false标志 - 请参阅jQuery.ajax文档以供参考。

请注意,在 jQuery 1.8 中,async将不推荐使用 。

var answer = null;

$.ajax({
    url: "validate/"+id,
    type: 'POST',
    data: {'field' : value},
    success: function(data) {
        //noty({text: data, type: 'success'});
    },
    error:function (xhr, ajaxOptions){
        noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
        answer = "error";
    },
    async: false
});

return answer;
于 2012-06-19T13:54:29.837 回答