Php jquery在不使用AsynchFalse的情况下调用多个ajax

Php jquery在不使用AsynchFalse的情况下调用多个ajax,php,jquery,ajax,Php,Jquery,Ajax,我有一个页面需要运行ajax命令几次。它必须为当前调用使用上一个ajax调用的结果 用外行的话说: 调用ajax,在远程服务器上构建实体,返回结果(结果是我得到一个专有id) 调用ajax,使用结果将附加数据发布到远程服务器,获取此发布的id 调用ajax、post-id等等 我的第一个想法是async:false,但我认为这是不可接受的,它破坏了代码执行顺序。我的目标也是拥有一个对话框窗口,在ajax调用发生时打印结果。当前,一旦所有ajax调用完成,就会出现对话框窗口。我没有得到非常少的

我有一个页面需要运行ajax命令几次。它必须为当前调用使用上一个ajax调用的结果

用外行的话说:

调用ajax,在远程服务器上构建实体,返回结果(结果是我得到一个专有id)

调用ajax,使用结果将附加数据发布到远程服务器,获取此发布的id

调用ajax、post-id等等

我的第一个想法是async:false,但我认为这是不可接受的,它破坏了代码执行顺序。我的目标也是拥有一个对话框窗口,在ajax调用发生时打印结果。当前,一旦所有ajax调用完成,就会出现对话框窗口。我没有得到非常少的:构建…完成,然后附加选项…完成等等

如果我将asynch:true设置为true,我就不需要id来处理下一个ajax

我还有其他选择吗

//form var is set earlier, standard serialized form.

  var functions = ['build','additionalOptions','completion'];

$('#submitButton').click(function(){

    $('#createGroupDialog').dialog({
        autoOpen:false,
        width: 1200,
        height:800,

        modal: true,
        position: {my: "top", at: "top"},
        resizable: false,
        closeOnEscape: true
       });

    $("#createGroupDialog").dialog('open').html("<p>Please Wait...</p>");

   function fireAjax(form,func)
    {
        $.ajax({
            type: "POST",
            url: "createGroup/createGroupDo.php",
            data: form+"&func="+func,
            asynch: false,
            success: function (result) {
                            $('#createGroupDialog').append(result);
            }
            });
    }

    jQuery.each(functions , function(i,func){
            fireAjax(form,func);
    });

});
//表单变量设置较早,是标准序列化表单。
var函数=['build','additionalOptions','completion'];
$(“#提交按钮”)。单击(函数(){
$('#createGroupDialog')。对话框({
自动打开:错误,
宽度:1200,
身高:800,
莫代尔:是的,
位置:{my:“top”,at:“top”},
可调整大小:false,
closeOnEscape:真的
});
$(“#createGroupDialog”).dialog('open').html(“请稍候…

”); 函数fireAjax(form,func) { $.ajax({ 类型:“POST”, url:“createGroup/createGroupDo.php”, 数据:form+“&func=“+func, asynch:false, 成功:功能(结果){ $('#createGroupDialog')。追加(结果); } }); } 每个(函数,函数(i,func){ fireAjax(form,func); }); });
asynch:false
确实是一种处理异步数据的糟糕方法。它不会扰乱执行顺序,但会一直阻塞,直到请求完成,这意味着在此期间没有其他JavaScript可以运行,这包括
onclick
处理程序和动画

由于您的请求依赖于以前的请求,因此您必须这样写:

$.ajax({
    url: "request1.php",
    data: data,
    success: function (result_1) {
        $.ajax({
            url: "request2.php",
            data: result_1,
            success: function (result_2) {
                $.ajax({
                    url: "request3.php",
                    data: result_2,
                    success: function () {}
                });
            });
        }); 
    }
});
但正如你所看到的,这变得很乏味。您可以使用回调,但最好使用
Promise
API

使用类似于:

$.ajax({
    url: "request1.php",
    data: data
}).then(function (result_1) {
    alert(result_1);
    return $.ajax({
        url: "request2.php",
        data: result_1,
    }); 
}).then(function (result_2) {
    alert(result_2);
    return $.ajax({
        url: "request3.php",
        data: result_2
    });
}).then(function (result_3) {
    alert(result_3);
});
值得注意的是,jQuery在幕后做了大量工作,使这个API成为可能<代码>$。ajax是一个非常灵活的函数。这意味着您可以在许多方面使用它。最好选择一种方式并坚持下去。当前的技术水平确实倾向于承诺。

看看
.promise()
对象。我认为他们应该完成你想要的。。。