Подтвердить что ты не робот

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

игнорировать скобки, синтаксис не важен для этого вопроса.

4b9b3361

Ответ 1

Вы можете сделать что-то вроде этого

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

Ответ 2

Вы можете сделать что-то вроде этого:

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}]

Это может быть рекурсивная функция, которая удаляет элемент, который заканчивается каждым вызовом.