2012-10-18 74 views
0

我有jQuery的兩個函數。這兩個函數都調用jQuery ajax。
都有屬性async:false。
在這兩個函數我重定向的基礎上的一些Ajax響應條件。

在第一個函數的成功中,我調用另一個函數,然後重定向到另一個頁面。但是我的第一個函數沒有重定向,因爲我的第二個函數沒有等待第一個函數的響應。
希望問題從我的問題中很明顯。同步兩個ajax jquery函數

我的第一個功能是如下

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

})); 

}

我用我的第一功能準備好了。所以我不想改變我的第一個功能。

+1

請顯示您的ajax代碼 – Hkachhia

+1

不應該使用'async:false',並且在下一個主要版本的jQuery中將不推薦使用'async:false'。 – Alnitak

+0

給一些簡單的模擬或片段。 – user10

回答

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

我沒有測試做這樣的事情,但是這大概如果你不需要第一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();