我使用ajax将用户帖子/评论保存到没有页面刷新的mysql表中。
首先:我有<div id="posts-container"></div>
第二:我尝试使用Jquery load()在表中循环并使用以下代码回显帖子:
var auto_refresh = setInterval(function() {
$('.posts-container').load("refresh_p.php").fadeIn();
}, 0 );
但它不起作用,页面刷新但内容无法加载,有人知道为什么吗?
第三:如果我复制包含refresh_p.php
的代码并粘贴到数据中,则成功加载。有点奇怪吗?是。希望得到任何帮助:))
修改 我修好了,问题出在refresh_p.php,它期待参数&#39; profile_id&#39; 我将功能修改为:
1:profile.php
search_user = document.getElementById('user_from').value;
var auto_refresh = setInterval(function() {
$('.posts-container').load("refresh_p.php?search_user="+search_user).fadeIn();
}, 5000 );
2:refresh_p.php
$profile_id = $_GET['search_user'];
一切都很好,但现在整个页面每5秒刷新一次。我只想要div&#39; post-container&#39;刷新。
我之前使用此功能刷新聊天框并且它有效,只刷新我想要的div。但这里刷新了整个页面。
答案 0 :(得分:3)
请勿使用setInterval
。对jQuery加载完成的递归调用,这样就可以确保调用是在另一个之后发送的,而不是同时发送。
试试这个:
var auto_refresh = function () {
$('.posts-container').load("refresh_p.php", function(){
setTimeout(auto_refresh, 800);
}).fadeIn();
}
auto_refresh();
此外,.fadeIn()
仅在第一次有效,之后您必须先隐藏div,然后再显示它。
演示:http://jsfiddle.net/P4P9a/1/(可能很慢,因为它正在加载整个页面)。
LE :由于我认为您没有返回HTML
页面,因此您应该使用$.get
代替$.load
。
$('.posts-container').get("refresh_p.php", function(data){
$(this).html(data);
setTimeout(auto_refresh, 800);
}).fadeIn();
答案 1 :(得分:0)
var auto_refresh = setInterval(function(){
$('.posts-container').load("refresh_p.php").fadeIn(50);
},1000);
将间隔从0(这只会产生一个疯狂的负载......)更改为1000毫秒(1秒)。如果您的路径正确,应该可以工作。
答案 2 :(得分:0)
确保您的间隔时间足以满足您的要求。还要考虑较少的实时选项,例如每15秒发送一组消息,在客户端一个接一个地显示它们。优化服务器端以使用缓存进行快速响应,并考虑使用json数据和客户端模板而不是html响应。