0

jQueryには2つの機能があります。どちらの関数もjQueryajaxを呼び出しています。
どちらにもプロパティasync:falseがあります。
どちらの関数でも、いくつかのajax応答条件に基づいてリダイレクトしています。

最初の関数が成功すると、別の関数を呼び出してから、別のページにリダイレクトします。しかし、2番目の関数が最初の関数の応答を待機していないため、最初の関数はリダイレクトされていません。
私の質問から問題が明らかになることを願っています。

私の最初の機能は以下の通りです

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

}

そして私の2番目の関数は最初の関数を呼び出しています

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呼び出しの結果が2番目の呼び出しを送信できるようにする必要がない場合は、呼び出しを追跡するためのカウンターを追加できます。両方の通話を同時に送信できるため、応答性が大幅に向上します。

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 に答える
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 に答える