it-swarm.com.de

jquery verschachtelte Ajax-Aufrufe Formatierung

Ich muss 6 Ajax-Anrufe nacheinander ausführen, basierend auf den Daten des vorherigen Anrufs. Ich schachtele jeden Anruf im Erfolg des vorherigen Anrufs. Meine Frage ist, welche Möglichkeiten es gibt, den Code so zu formatieren, dass er nicht eine Million Zeilen in meinem Editor landet.

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

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

14
bart2puck

Sie können so etwas tun

function ajaxCall1(){
    $.ajax({
        success: function(){
            ajaxCall2();
        }
    });
}
function ajaxCall2(){
    $.ajax({
        success: function(){
            ajaxCall3();
        }
    });
}
function ajaxCall3(){
    $.ajax({
        success: function(){
            ajaxCall4();
        }
    });
}
33
Rimpy

Sie können so 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 hinzufügen.

Eine andere Idee ist, eine Funktion zu erstellen, die ein Array wie folgt empfängt:

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

Dies könnte eine rekursive Funktion sein, bei der ein Element bei jedem Anrufende gelöscht wird.

0
Onaiggac