2014-03-06 85 views
12

我有一個要求,以先前調用的數據連續進行6個Ajax調用。我在前一個電話的成功中嵌套每個電話。我的問題是什麼是格式化代碼的好方法,以便它不會在我的編輯器中結束一百萬行?jquery嵌套ajax調用格式

$.ajax({ 
       type: "POST", 
       url: "someScript/someScript.php", 
       data: form + "&func=build", 
       success: function (result) { 
       if (result == "ok") 
       { 
        $.ajax({ 
        type: "POST", 
        url: "someScript/someScript.php", 
        data: form + "&func=someOtherFunc", 
        success: function (result) { 
         if (result == "ok") 
         { 
          $.ajax({ 
          type: "POST", 
          url: "someScript/someScript.php", 
          data: form + "&func=someOtherFunc", 
          success: function (result) { 
          if (result == "ok") 
          { 
          .....and so on 
          } 
          }) 
         } 
         }) 
        }) 
        } 
       }) 

忽略括號,語法對此問題不重要。

+0

爲什麼你不包裝函數中的ajax調用? – Rimpy

+0

創建一個php腳本,在1鏡頭中完成所有這些工作? –

回答

26

你可以做這樣的事情

function ajaxCall1(){ 
    $.ajax({ 
     success: function(){ 
      ajaxCall2(); 
     } 
    }); 
} 
function ajaxCall2(){ 
    $.ajax({ 
     success: function(){ 
      ajaxCall3(); 
     } 
    }); 
} 
function ajaxCall3(){ 
    $.ajax({ 
     success: function(){ 
      ajaxCall4(); 
     } 
    }); 
} 
+1

如何將一些參數從ajaxCall1傳遞給ajaxCall2並將ajaxCall2傳遞給ajaxCall3? –

0

你可以做這樣的事情:

var url = '/echo/json/'; 
var dados = {acao: acao,codigo: null}; 

function funcao1(json,data) 
    $.post(url, data, function(json){ 
     return json; 
    }).fail(function() { 
     alert("deu erro"); 
    }); 
} 

alert(funcao1(funcao1(funcao1(),{id:"id1"}),{id:"id1"})); 

您可以添加URL和其他數據作爲參數。

另一個想法是創建一個接收陣列這樣的功能:

[{url:'url1', cb:function1},{url:'url2',cb:function2}] 

這可能是刪除一個項目每一個通話結束一個遞歸函數。