2011-03-25 44 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的阿贾克斯试图始终把误差函数,这样你可以找出如果事情是错的请求