2014-03-06 9 views
12

Ich habe eine Anforderung, 6 Ajax-Anrufe nacheinander basierend auf Daten aus dem vorherigen Anruf zu machen. Ich sortiere jeden Anruf in den Erfolg des vorherigen Anrufs. meine Frage ist, was sind einige gute Möglichkeiten, um den Code zu formatieren, so dass es nicht mehr als eine Million Zeilen in meinem Editor?Jquery verschachtelte Ajax Anrufe Formatierung

$.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 
          } 
          }) 
         } 
         }) 
        }) 
        } 
       }) 

ignorieren Klammern, Syntax ist nicht wichtig für diese Frage.

+0

Warum wickeln Sie Ajax-Aufruf nicht in Funktionen? – Rimpy

+0

Erstellen Sie ein PHP-Skript, das all diese Arbeit in 1 Schuss macht? –

Antwort

26

Sie können wie diese können Sie so etwas wie dieses

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

Wie wäre es, einige Parameter von ajaxCall1 zu ajaxCall2 und von ajaxCall2 zu ajaxCall3 zu übergeben? –

0

tun etwas tun:

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

Sie können die URL und andere Daten als Parameter hinzuzufügen.

Eine weitere Idee ist es, eine Funktion zu erstellen, die ein Array wie folgt erhalten:

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

Dies könnte eine rekursive Funktion sein, die alle Anrufe zu beenden ein Element löschen.