2011-10-29 49 views
1

我有一个AJAX函数来检查新消息,然后将新消息预先添加到#message。但是,我的问题是这个函数每20秒触发一次,但是每当你点击立即触发该函数的刷新按钮时,它就会混乱起来。下面是我对AJAX功能:AJAX重新加载按钮有时会多次预加载相同的消息

function ajaxMail() { 
    var message_id = $('.line:first').attr('id'); 
    jQuery.ajax({ //new mail 
     type: 'get', 
     dataType: 'text', 
     url: "/employee/message/check_mail.php", 
     data: { 
      latest_id: message_id, 
      t: Math.random() 
     }, 
     success: function(data, textStatus) { 
      $('#messages_inner').prepend(data); 
     } 
    }); 
} 

function updateTitles() { 
    //if(titleChange !== false) { 
    $.get('update.php?type=title', function(data) { 
     document.title = data; 
    }); 
    //} 
    $.get('update.php?type=header', function(data) { 
     $('#heading').html(data); 
    }); 
    $.get('update.php?type=total', function(data) { 
     $('#total').html('Total messages: ' + data); 
    }); 
    setTimeout("updateTitles();ajaxMail();", 20000); 
} 
updateTitles(); 

而对于这个刷新按钮是我用:因为按钮或

$(document).ready(function() { 
    $('#refresh').click(function() { 
     ajaxMail(); 
     updateTitles(); 
    }); 
}); 

有时候,同样的确切消息被前置到消息的div一些东西。 (但是,当我刷新当然还有不再同一消息的2)这是当同样的信息被预先考虑多次一个时间:

enter image description here

首先,我按下刷新按钮,它预先考虑新消息。但是大约5秒钟之后,功能再次触发,并由于某种原因再次添加了相同的信息。另外,正如您可以看到收件箱计数为2,因为实际上只有2(“测试”和“Test12345”),但由于某种原因,“Test12345”被预置了2次。

有谁知道它为什么这样做?如果您需要查看,我还可以提供check_mail.php的代码。

+0

谢谢@ 3nigma将第二个代码放在代码框中。我以前有过,但有些事情搞砸了。 – Nathan

+0

只是尝试在你的ajaxMail ajax req中设置'cache:false',尽管Math.Random()已经在做它 – Rafay

+0

@ 3nigma所以,只需在$ .ajax中添加'cache:false'?但是,如果Math.Random()已经在做什么'cache:false'会怎么做? – Nathan

回答

2

我建议尝试cache:false,我浏览器缓存ajax请求,即使我发送一个随机字符串。 另外,请考虑在重新设置之前清除超时,因为每次按下刷新按钮时,都会启动另一个超时。

+0

哦,好的。我如何用上面的代码清除超时? – Nathan

+0

'setTimeout'返回一个可用于取消它的值。 'var timer = setTimeout('yourFunctions',20000); clearTimeout(timer);'当然,如果刷新函数执行'clearTimeout','timer'必须是全局的或者传入的。 – hyperslug

+0

@hyperslug我明白了,谢谢。 – Nathan