防止其他代码运行,直到AJAX请求返回某些内容

时间:2016-02-18 20:33:31

标签: javascript jquery ajax

在下面的例子中,我创建了一个严格接受参数并进行ajax调用然后返回结果的函数。问题是,由于AJAX请求是异步的,我依赖返回值的其余JavaScript继续运行。在下面的另一个函数中调用anotherFunction()。

在返回expirDates之前,是否有任何技术不能在anotherFunction()中运行剩余的代码?我知道我可以直接将ajax调用放在anotherFunction()中然后在ajax成功函数中编写我的其余代码,但我想让ajax请求可重用..

function GetExpirationDates(end, start) {
    var data = {
        end: end,
        start: start
    }

    $.ajax({
        type: 'POST',
        url: '@Url.Action("GetExpirationDates", "Products")',
        data: data,
        dataType: 'json',
        success: function (data) {

            // Success logic goes here here
               return data;

        }
    });
}


function anotherFunction() {
    // code here...

    var expirDates = GetExpirationDates(end, start);

    // more code here that continues to run, but relies on expirDates...
}

1 个答案:

答案 0 :(得分:1)

尝试在return中使用GetExpirationDates语句,使用.then()链接到expirDates,以便在GetExpirationDates

返回jQuery承诺时执行任务
function GetExpirationDates(end, start) {
    var data = {
        end: end,
        start: start
    }
    // return jQuery promise object from `GetExpirationDates`
    return $.ajax({
        type: 'POST',
        url: '@Url.Action("GetExpirationDates", "Products")',
        data: data,
        dataType: 'json'
    });
}


function anotherFunction() {
    // code here...

    var expirDates = GetExpirationDates(end, start);

    // more code here that continues to run, but relies on expirDates...
    expirDates.then(function(data) {
      // do stuff with `data`
    }, function error(err) {
      // handle errors from `$.ajax()`
    })
}