Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 如何等待所有ajax查询完成(并使用组合结果)_Jquery Ui_Jquery - Fatal编程技术网

Jquery ui 如何等待所有ajax查询完成(并使用组合结果)

Jquery ui 如何等待所有ajax查询完成(并使用组合结果),jquery-ui,jquery,Jquery Ui,Jquery,在这段代码中,我使用两个警报框来显示消息变量值。 当我成功运行此代码时,在第一个警报框中我得到空白值,在第二个警报框中我得到我需要的值,然后它将进入if条件。 如果我不使用警报框,那么它将始终在display_message变量中取空值,并且永远不会进入if条件。那么,我需要做什么更改才能在没有警报框的情况下运行此代码 您正在通过AJAX进行异步调用,但您的代码是同步执行的。因此,它将在AJAX调用完成之前返回。第一个警报框只为函数提供了追赶的时间。您需要在成功回调中处理所有这些代码 var d

在这段代码中,我使用两个警报框来显示消息变量值。 当我成功运行此代码时,在第一个警报框中我得到空白值,在第二个警报框中我得到我需要的值,然后它将进入if条件。
如果我不使用警报框,那么它将始终在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();