2011-03-25 77 views
1

我的腳本工作得很好。但是,內容不會自行刷新以獲取新數據。爲什麼這樣?使用Ajax功能的頁面不會刷新數據

function updateMsg() { 
    $.ajax({ 
     url: "/recent/notifications/", 
     cache: false, 
     success: function(html){  
     $("#profile_notifarea_msgbox").html(html); 
     } 
    }); 
    setTimeout('updateMsg()', 4000); 
} 
updateMsg(); 
+1

更多細節?你的內容不刷新?我不明白。 – 2011-03-25 15:48:59

+0

不應該有任何區別,但你的「setTimeout」調用可以只是'setTimeout(updateMsg,4000);'。 FireBug針對ajax調用的響應顯示了什麼? – Pointy 2011-03-25 15:50:29

+0

...是否有新的數據要顯示? – rockerest 2011-03-25 15:50:45

回答

1

你的setTimeout可以直接引用updateMsg而不是使用一個字符串:

var timeout; 

function updateMsg() { 
    $.ajax({ 
     url: "/recent/notifications/", 
     cache: false, 
     success: function(html){  
     $("#profile_notifarea_msgbox").html(html); 
     timeout = setTimeout(updateMsg, 4000); 
     } 
    });  
} 
updateMsg(); 

function stopUpdate() { 
    clearTimeout(timeout); 
} 

要停止連續更新保存在一個變量的setTimeout的參考,然後調用clearTimeout並傳入變量。在這個例子中,你只需調用函數stopUpdate()來取消更新。

+0

如果將updateMsg()放入成功回調,這不就夠了嗎?我假設這個想法是在數據返回後更新頁面,這樣你可以一起消除超時。 – Luke 2011-03-25 15:55:41

+0

@Luke然後一旦得到結果,它會立即再次調用。取決於網絡服務器的響應速度有多快,它可能會每秒發射多次Ajax請求。 – 2011-03-25 15:57:14

+0

@infernal你的代碼和我的代碼有什麼區別?我確實有$(document).ready也只是它太長了才把它放在這裏 – 2011-03-25 16:11:58

0

當您使用jQuery的阿賈克斯試圖始終把誤差函數,這樣你可以找出如果事情是錯的請求