【问题标题】:jquery nested ajax calls formattingjquery嵌套ajax调用格式化
【发布时间】:2014-03-06 19:05:39
【问题描述】:

我需要根据上一次调用的数据连续进行 6 次 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
                           }
                           })
                         }
                      })
                    })
                   }
                 })

忽略括号,语法对于这个问题并不重要。

【问题讨论】:

  • 为什么不在函数中封装 ajax 调用?
  • 创建一个一次性完成所有这些工作的 php 脚本?

标签: jquery ajax formatting


【解决方案1】:

你可以这样做

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

【讨论】:

  • 赞!在与 AJAX 回调的噩梦和需要传递参数作斗争之后,您提出了一个简单而合乎逻辑的解决方案,我(从通过本网站搜索可以明显看出,其他人)没有考虑过。谢谢。
【解决方案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}]

这可能是一个递归函数,每次调用结束时删除一个项目。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多