2013-04-18 69 views
1

你好家伙这是我在这个论坛上的第一篇文章。JQuery每个函数与AJAX循环

我有这个功能

function TestePresenca(){ 
var msg = '' 
$('#teste tbody tr').each(function(){ 
    var MemberId; 
    var ClassId; 
    var PresenceDate; 
    var OClasse; 

    var DataPre = $('#data_presenca').val(); 
    var TotBiblia = $('#tot_biblia').val(); 
    var TotOferta = $('#tot_ofertas').val(); 

    $(this).find('td').each(function(){ 
     if($(this).index() == 0){ 
      MemberId = $(this).text(); 
     } 

     if($(this).index() == 3){ 
      $(this).closest('tr').find("select").each(function(){ 
       ClassId = this.value; 
      }) 
     } 

     if($(this).index() == 4){ 
      OClasse = $(this).text(); 
     }   
    }); 

    $.ajax({ 
     type: 'POST', 
     url: BASE + '/save_list_presence', 
     data: {pMemberId: MemberId, pClassId: ClassId, pOClasse: OClasse, pDataPre: DataPre, pTotBiblia: TotBiblia, pTotOferta: TotOferta}, 
     success: function(retorno){ 
      msg += retorno; 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert('Erro!'); 
     } 
    }); 
}); 
alert(msg);} 

我的问题是,“警告(MSG)”火灾没有消息,在调试时我看到那么每阿贾克斯其火灾后执行与“味精”变量在最后被傀儡,但警报之前被解雇。

任何人有任何想法我怎么能解决它?

在此先感谢。

+0

经典的异步误解:P –

+0

那是因为,这是异步调用 –

+0

Ajax是异步的。你不能修复它,而不使它同步(这是一个可怕的想法)。 –

回答

-1

尝试在你的Ajax调用使用此async: false

$.ajax({ 
     type: 'POST', 
     url: BASE + '/save_list_presence', 
     async: false, 
     ... 

jQuery.ajax() API Docs

默认情况下,所有的请求都是异步发送(即此设置为 真默认情况下)。如果您需要同步请求,请将此选项设置为 false。跨域请求和dataType:“jsonp”请求不支持 同步操作。请注意,同步请求可能会暂时 锁定浏览器,禁用任何行动,同时请求 处于活动状态。

+0

This isn真的不是一个解决方案。 – Blender

+0

这工作就像一个魅力。谢谢。 但是,如果不是最好的解决方案,有人可以指出正确的方法吗? –

+0

我决定改变函数我会创建一个新的函数来创建一个JSON,并将这个JSON发送到我的PHP代码,然后我将在PHP中循环,并将我的整个消息返回给jQuery显示给我。 –

0

AJAX是异步的 - 它下面的代码可能在AJAX调用完成之前运行。