0

我有两个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();
    }

}));

}

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

4

2 回答 2

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
            }
        });
    }
});​

我还没有测试过这样的事情,但这大致就是我开始的方式

于 2012-10-18T12:32:51.277 回答
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();
于 2012-10-18T12:52:31.647 回答