Php 使用setInterval循环浏览div列表,每x秒刷新一次数据
我有一个包含用户帖子/消息列表的页面。当一篇文章被喜欢时,我希望它能反映在所有其他用户身上,根据我的研究,setInterval可以通过刷新特定内容几秒钟来完成这项工作。目前,我在循环浏览所有用户消息和显示最新的喜欢数方面遇到了问题。所发生的事情是,显示的数字在不断变化,并在单个帖子的所有值之间循环。示例:如果我在三个不同的帖子上分别有1、0和2个喜欢,则第一篇帖子的数字将变为1、0和2,而不是仅显示“1”。谈到AJAX,我算是个初学者 这是我的密码: Jquery/AjaxPhp 使用setInterval循环浏览div列表,每x秒刷新一次数据,php,jquery,mysql,ajax,setinterval,Php,Jquery,Mysql,Ajax,Setinterval,我有一个包含用户帖子/消息列表的页面。当一篇文章被喜欢时,我希望它能反映在所有其他用户身上,根据我的研究,setInterval可以通过刷新特定内容几秒钟来完成这项工作。目前,我在循环浏览所有用户消息和显示最新的喜欢数方面遇到了问题。所发生的事情是,显示的数字在不断变化,并在单个帖子的所有值之间循环。示例:如果我在三个不同的帖子上分别有1、0和2个喜欢,则第一篇帖子的数字将变为1、0和2,而不是仅显示“1”。谈到AJAX,我算是个初学者 这是我的密码: Jquery/Ajax function
function refreshPostLikes() {
setInterval(function() {
$(".posts .id").each(function() { //get id for each post
var postid = $(this).attr("value");
updatePostLikes(postid); //pass the postid variable
});
}, 1000);
}
function updatePostLikes(postid) {
$.ajax({
url: "/main/refresh-post-like.php",
type: "post",
data: {postid: postid}, //send data to php file
success: function(data) {
$(".posts .like").html(data); //output number of likes
}
});
}
PHP查询
<?php
require_once('../connection.php');
$postID = $_POST['postid'];
$likeCountQuery = "select count(*) as total_likes from posts_likes WHERE like_status=1 AND post_id=".$postID; //query number of posts with a like
$likeQueryResult = mysqli_query($conn, $likeCountQuery);
while($likeNumber = mysqli_fetch_assoc($likeQueryResult)) {
$likes = $likeNumber['total_likes'];
if($likes != 0) {
echo $likes;
}
else {
echo '';
}
}
?>
仍然不确定这是最好的方法,但代码不起作用的原因是在代码的成功部分更新HTML时忽略了postid
function updatePostLikes(postid) {
$.ajax({
url: "/main/refresh-post-like.php",
type: "post",
data: {postid: postid}, //send data to php file
success: function(data) {
$(".posts .like").html(data); //output number of likes
}
});
}
使用此命令$(.posts.like”).html(数据)//输出喜欢的数量
您正在更新使用相同值指定这些类的所有div。
将postid设置为div的id,并将命令更改为
$(“#posted”).html(数据)//输出喜欢的数量
是不断变化和循环通过所有的值为一个单一的
职位
发生这种情况是因为没有需要更新的帖子引用。您现在要做的是遍历所有具有“.posts.id”类的元素,因此更新将应用于所有帖子,而不是单个帖子。您应该修改函数,使其仅更新该帖子(尝试在html中向其传递唯一id)
其中N是您的帖子的id。(例如posted)
然后使用以下命令更新该值
function updatePostLikes(postid) {
$.ajax({
url: "/main/refresh-post-like.php",
type: "post",
data: {
postid: postid
}, //send data to php file
success: function(data) {
//$(".posts .like").html(data); //output number of likes
$("#post-"+postid).html(data); // in this way we're get the right post
}
});
}
function refreshPostLikes() {
$(".posts .id").each(function() { //get id for each post
var postid = $(this).attr("value");
updatePostLikes(postid); //pass the postid variable
});
setTimeout(refreshPostLikes, 1000); //Check every sec if there are update
}
setTimeout(updateChat, 1000); //Start the check
#我想一想,你是否真的需要这项功能,以及你是否想实现它。您可能很容易终止服务器(每秒钟为每个用户检查页面上的所有帖子)#2。你能确认你的ajax调用得到了正确的计数吗#3$(.posts.like”).html(数据)代码>替换与该选择器匹配的所有元素的HTML,您需要找到适合您的ID的元素send@Lapskaus有没有别的办法?或者干脆不做会更好吗#2、是的#3、怎么做?我尝试用$(“.posts.like”)添加.each(),但它似乎仍然不起作用。如果喜欢某篇文章,最好换一种方式,捕捉该事件并更新计数器。@RST,是的,我为喜欢该文章的用户提供了这方面的内容。但是,我希望喜欢的内容能够实时显示给其他用户,因此我使用了setinterval来刷新该部分。我认为对每个div执行一个请求不是一个好主意。收集它们并执行一个请求,然后根据该响应进行更新/填充。
<?php
require_once ('../connection.php');
$postID = $_POST['postid']; //Escape this value before use inside the query see linked question
// NEVER TRUST USER INPUT
//$likeCountQuery it could be used for perform a SQL Injection NEVER TRUST USER INPUT
//NEVER !!!
$likeCountQuery = "SELECT COUNT(*) AS total_likes FROM posts_likes WHERE like_status=1 AND post_id=".$postID; //query number of posts with a like
$likeQueryResult = mysqli_query($conn, $likeCountQuery);
while ($likeNumber = mysqli_fetch_assoc($likeQueryResult))
{
$likes = $likeNumber['total_likes'];
if ($likes != 0)
{
echo $likes;
}
else
{
echo '';
}
}
?>