Jquery ui 如何等待所有ajax查询完成(并使用组合结果)
在这段代码中,我使用两个警报框来显示消息变量值。 当我成功运行此代码时,在第一个警报框中我得到空白值,在第二个警报框中我得到我需要的值,然后它将进入if条件。Jquery ui 如何等待所有ajax查询完成(并使用组合结果),jquery-ui,jquery,Jquery Ui,Jquery,在这段代码中,我使用两个警报框来显示消息变量值。 当我成功运行此代码时,在第一个警报框中我得到空白值,在第二个警报框中我得到我需要的值,然后它将进入if条件。 如果我不使用警报框,那么它将始终在display_message变量中取空值,并且永远不会进入if条件。那么,我需要做什么更改才能在没有警报框的情况下运行此代码 您正在通过AJAX进行异步调用,但您的代码是同步执行的。因此,它将在AJAX调用完成之前返回。第一个警报框只为函数提供了追赶的时间。您需要在成功回调中处理所有这些代码 var d
如果我不使用警报框,那么它将始终在display_message变量中取空值,并且永远不会进入if条件。那么,我需要做什么更改才能在没有警报框的情况下运行此代码 您正在通过AJAX进行异步调用,但您的代码是同步执行的。因此,它将在AJAX调用完成之前返回。第一个警报框只为函数提供了追赶的时间。您需要在成功回调中处理所有这些代码
var display_message="";
$('input:checked').each(function(index) {
var profile_id=$(this).val();
$.ajax({
type: 'post',
url: 'myUrl',
data: data,
success: function(data) {
if(data=="ok")
display_message = display_message + data +", ";
}
});
});
alert(display_message);
alert(display_message);
if($.trim(display_message)!=""){
jAlert("Your birthdate already exits in "+display_message.substring(0, display_message.length - 2)+".", "Bdate");
return false;
}
为什么你的数据是“数据”?我看不到这里声明了任何名为data的变量。您应该将要用作参数的值传递到数据选项中
编辑:这就是为什么你会得到空值。数据未初始化为任何内容。只有在成功函数之后,您的“数据”才会具有该值,因为您使用相同的名称声明返回值您希望所有ajax查询完成并返回结果,对吗 那么这就是一个同步问题 我建议使用这种方法(为了清晰起见,代码被简化)
基本上,您知道应该发出多少请求,并且在返回该数量的请求之前不会显示结果。您可以在ajax中添加async:false。mrtshermani建议的替代方案不能在每个循环中使用if条件。我在循环外使用if条件,因为我在display_message variable中添加数据,如果它不为null,那么它将进入if条件并返回false;我的解决方案不需要if条件,只需在url后面添加一个async:false:“myUrl”亲爱的mrtsherman,我不能在每个循环中使用if条件。我在循环外使用if条件,因为我在DISPLAY_消息变量中添加数据,如果它不为null,则它将进入if条件并返回false;啊,他的问题终于让我明白了。干得好。
var display_message="";
$('input:checked').each(function(index) {
var profile_id=$(this).val();
$.ajax({
type: 'post',
url: 'myUrl',
data: data,
success: function(data) {
if(data=="ok")
display_message = display_message + data +", ";
if($.trim(display_message)!=""){
jAlert("Your birthdate already exits in "+display_message.substring(0, display_message.length - 2)+".", "Bdate");
return false;
}
});
});
var inputs_processed = -1;
var inputs_to_process = -1;
function queryData() {
inputs_to_process = $('input:checked').length;
$('input:checked').each(function() {
$.ajax({success: function(data) {
inputs_processed += 1;
// build up that message
}});
});
}
function displayResult() {
if (inputs_processed == inputs_to_process) {
// display result
} else {
// not all queries finished yet. Wait.
setTimeout(displayResult, 500);
}
}
queryData();
displayResult();