2014-04-17 61 views
1

我有兩個不同的ajax調用。第一個連接到Web服務的一種方法。如果它爲特定字段獲得任何空值,則應該從同一個Web服務調用另一個方法。這裏有使用兩個不同的ajax調用

$.ajax({ 
url: "webservices/ProdMonitorService.asmx/GetEstTimePrelimFinalCur", 
data: "{'myactivity':'" + myactivity + "'}", 
dataType: "json", 
type: "POST", 
contentType: "application/json; charset=utf-8", 
async: true, 
success: function (data) { 
    var obj = jQuery.parseJSON(data.d); 

for (var i = 0; i <= obj.length - 1; i++) { 



     var dur_time_formated = ''; 

     var mytimedur = obj[i].time_duration; 

     if (mytimedur != null) { 

      dur_time_formated = mytimedur.replace('.000000', ''); 
     } 

     else { 
      //only one time check for this 

      $.ajax({ 
       url: "webservices/ProdMonitorService.asmx/GetEstTimePrelimFinalCurTotalProcessing", 
       data: "{'myactivity':'" + myactivity + "'}", 
       dataType: "json", 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       async: true, 
       success: function (data2) { 
        var obj2 = jQuery.parseJSON(data2.d); 

        dur_time_formated = obj2[0].total_processtime.replace('.000000', ''); 

        }, error: function (result) { 
        //alert("Error: Please contact administrator for help: " + result.responseText); 
       } 
      }); 


     } 

對於第一個Ajax調用,它就會obj中的代碼。[0] ...... OBJ [7]但我們說的obj [0] .time_duration來null,則它應該去到第二個Ajax調用,但即使方法「GetEstTimePrelimFinalCurTotalProcessing」返回一些結果,dur_time_formated varialbe爲空;它甚至不是完全通過第二個Ajax調用後第一個。

第一次完成後應該使用done函數嗎?

回答

0

你應該在這裏嘗試「async:false」而不是「async:true」。這將適用於你的情況。

+0

在第一次ajax呼叫或第二? – one1day

+0

在第一次ajax呼叫。但你可以同時使用。 –

+0

感謝它解決了這個問題。我用它們兩個 – one1day

0

請記住,ajax調用是異步的。這意味着dur_time_formated將在稍後for循環之後設置。所以要解決這個問題,你可以使用循環外的任何數組變量或同步ajax請求

+0

首先感謝您的回答。所以你的意思,而不是使用var dur_time_formated =''; ,我應該使用var dur_time_formated = new Array();或簡單var dur_time_formated = []; – one1day

+0

要說你完全沒有真實的數據有點複雜。如果第二個Ajax請求是同步的,那會更好。因爲在請求完成時不知道,所以你不知道什麼時候可以使用你的對象。 – Aray

相關問題