40

我想要一个从 ajax 请求返回值的函数。我想停止 javascript 执行,直到函数获得由 ajax 异步请求返回的值。就像是:

function myFunction() {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax asynchronus request 
    return data; // return data from the ajax request
}
4

5 回答 5

51

您需要注册一个回调函数,如下所示:

function test() {
    myFunction(function(d) {
        //processing the data
        console.log(d);
    });
}

function myFunction(callback) {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
            callback(data);
        },
        error: function () {}
    }); // ajax asynchronus request 
    //the following line wouldn't work, since the function returns immediately
    //return data; // return data from the ajax request
}
于 2013-04-06T05:20:31.980 回答
14

Ajax 是异步的,这意味着调度了 ajax 调用,但您的代码会像以前一样继续运行而不会停止。在收到响应之前,Ajax 不会停止/暂停执行。您必须添加一个额外的回调函数或类似的东西。

    function myFunction() {
var data;
$.ajax({
    url: 'url',
    data: 'data to send',
    async: false,
    success: function (resp) {
        data = resp;
        callback.call(data);
    },
    error: function () {}
}); // ajax asynchronus request 
return data; // return data from the ajax request
  }
于 2013-04-06T05:20:35.923 回答
8

你需要做 asyn = False 像:

$.ajax({
    async: false,
    // ...
    success: function(jsonData) {
    //Your Logic
    }
});
于 2013-04-06T05:19:58.103 回答
6
$.ajax({
        url: 'url',
        data: 'data to send',
        async: false,
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax synchronus request 
于 2013-04-06T05:18:44.393 回答
4

用于async: false您的 ajax 请求,因为 Ajax 是异步的。

将 async 设置为 false 意味着您正在调用的语句必须在函数中的下一条语句被调用之前完成。如果您设置 async: true 则该语句将开始执行,并且无论异步语句是否已完成都将调用下一条语句。

来自 jQuery文档

默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false

于 2013-04-06T05:18:38.530 回答