2014-04-01 69 views
0

我在ajax成功函數內有以下代碼。發出調用另一個Ajax成功jQuery的AJAX

$.each(data,function(index,element){        
$.ajax({     
      type: 'GET',      
      url: "http://192.168.1.56/SampleAjaxCall/sample.svc/sampleFunciton",      
      contentType: 'application/json; charset=utf-8', 
      dataType: 'jsonp', 
      async: false, 
      success:function(response){ 

        alert("Success !"); // invokes after the loop  
      }   
     }); 

     alert("After the ajax call");  // invokes first 
}); 

首先我收到此提示消息Ajax調用後。在循環結束後,我收到了此警報消息警報(「成功!」)。所以在循環結束後調用ajax。所以我需要首先調用ajax。如何實現這種情況。

回答

4

實際上,您的ajax調用實際上是在之前調用第二條警報消息(「在ajax調用之後」)。但是,由於AJAX代表異步等,當正在處理ajax請求時,腳本的其餘部分已經被執行。因此,如果您希望代碼在ajax調用之後執行,請將其包裝在一個函數中,然後在成功塊中調用該函數(或者將代碼移入成功回調函數中)。例如:

var after_call_func = function() { 
    alert("After the ajax call"); 
}; 

$.each(data,function(index,element){        
    $.ajax({     
     // your ajax configuration 
     success:function(response){ 
      alert("Success !"); 
      after_call_func(); // call the function when ajax is complete 
     }   
    }); 
}); 

編輯

現在我注意到你有async選項設置爲false,這是最有可能,爲什麼你所期望的警報執行擺在首位的AJAX調用之後。 ..但是,正如jQuery documentation告訴我們:

跨域請求和dataType:「jsonp」請求不支持同步操作。

它看起來像你有兩個...因此,要麼不使用jsonp數據類型,也不要跨域請求,或包裝成功塊中的ajax調用後執行的代碼,如上面的例子。

0

根據jQuery.ajax文檔,dataType: "jsonp"請求不支持同步操作,所以async: false不會工作。你需要像喬治所描述的那樣去做。