同步两个ajax jquery函数

时间:2012-10-18 12:21:47

标签: ajax jquery

我有两个jQuery函数。这两个函数都调用了jQuery ajax 两者都有属性async:false 在我根据某些ajax响应条件重定向的函数中
在第一个函数成功时,我调用另一个函数,然后重定向到另一个页面。但我的第一个功能是不重定向,因为我的第二个功能是没有等待第一个功能的响应 从我的问题中可以清楚地看出希望问题。

我的第一个功能如下

function fnGetCustomer() {
function a(a) {
    $("#loading").hide();
    //on some condition
    //other wise no redirection
    self.location = a;
}
var b = $("input#ucLeftPanel_txtMobile").val();

"" != b && ($("#loading").show(), $.ajax({
    type: "POST",
    url: "Services/GetCustomer.ashx",
    data: { "CustMobile": b },
    success: a,
    async: false,
    error: function () {
        $("#loading").hide();
    }
}));

}

和我的第二个函数我正在调用第一个函数

function fnSecond() {
    $.ajax({
    type: "POST",
    url: "some url",
    async: false,
    data: { "CustMobile": b },
    success: function(){ 
       fnGetCustomer();
       //if it has all ready redirected then do not redirect
        // or redirect to some other place 
     },
    error: function () {

        $("#loading").hide();
    }

}));

}

我正在使用我的第一个功能。所以我不想改变我的第一个功能。

2 个答案:

答案 0 :(得分:2)

这样的设置应该有效;

$.ajax({
    data: foo,
    url: bar
}).done(function(response) {
    if (response == "redirect") {
        // redirect to some page
    } else {
        $.ajax({
            data: foo,
            url: bar
        }).done(function(response2) {
            if (response2 == "redirect") {
                // redirect to some other page
            } else {
                // do something else
            }
        });
    }
});​

没有测试做过这样的事情,但这大概是我开始的方式

答案 1 :(得分:2)

如果您不需要第一个AJAX呼叫的结果能够发送第二个,您可以添加一个计数器来跟踪呼叫。由于您可以同时发送两个电话,因此响应速度会更快。

var requestsLeft = 2;

$.ajax({
    url: "Firsturl.ashx",
    success: successFunction
});

$.ajax({
    url: "Secondurl.ashx",
    success: successFunction
});

function successFunction()
{
    requestsLeft--;
    if (requestsLeft == 0)
        doRedirectOrWhatever();
}

如果你绝对需要这样做,你可以做这样的事情。我的例子期望一个json响应,但这并不要求这种方法起作用。

var ajaxurls = ["Firsturl.ashx",  "Secondurl.ashx"]

function doAjax()
{
    $.ajax({
        url: ajaxurls.shift(), // Get next url
        dataType: 'json',
        success: function(result)
        {
            if (result.redirectUrl) // or whatever requirement you set
                /* redirect code goes here */
            else if (ajaxurls.length>0) // If there are urls left, run next request
                doAjax();
        }
    });
}
doAjax();