2011-12-17 28 views
1
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; 
      } 

在此代码中,我使用两个alert-box来显示display_message变量值。 当我成功运行这个代码,在第一个警告框中我得到空白值和第二个警告框我得到的价值,我需要,然后它会进入如果条件。 如果我不使用警报框,那么它将始终在display_message变量中取空值,并且永远不会进入if条件。所以我需要更改以运行此代码而不使用警报框?如何等待所有Ajax查询完成(并使用组合结果)

回答

1

您正在通过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 +", "; 
         if($.trim(display_message)!=""){ 
          jAlert("Your birthdate already exits in "+display_message.substring(0, display_message.length - 2)+".", "Bdate"); 
     return false; 
        } 
      }); 
    }); 
+0

亲爱的mrtsherman,我不能使用if条件在每个loop.i使用if条件外循环,因为我在disaplay_message varible中添加数据,如果它不为null,那么它会进入if条件并返回false; – 2011-12-17 07:12:44

0

为什么你的数据是“数据”?我无法看到任何称为数据的变量在这里声明。您应该将想要用作参数的值传入数据选项。

编辑:这就是为什么你得到空值。数据不会初始化为任何东西。只有在成功函数之后,您的“数据”才会具有值,因为您声明了具有相同名称的返回值。

+0

我在数据变量中传递'profile_id ='+ p_id +'&s_id ='+ 25。 – 2011-12-17 07:05:13

+0

你可以在你的ajax中添加async:false。另一种选择,如mrtsherman – shennyL 2011-12-17 07:07:19

1

您希望所有的ajax查询都能完成并返回结果吗?

然后这是一个同步问题。

我会建议这种方法(为简明起见,代码被简化了)。

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(); 

基本上,您知道应该创建多少个请求,并且直到请求返回的次数才显示结果。