2011-10-29 85 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