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