在php while循环中使用jQuery函数
我无法使用jQuery脚本在帖子上投票。我有一个“frontpage”,上面有来自mysql数据库的帖子列表。在每个帖子上都有一个小投票箱,你可以投赞成票或反对票 jQuery/ajax脚本:在php while循环中使用jQuery函数,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我无法使用jQuery脚本在帖子上投票。我有一个“frontpage”,上面有来自mysql数据库的帖子列表。在每个帖子上都有一个小投票箱,你可以投赞成票或反对票 jQuery/ajax脚本: <script type="text/javascript"> $(document).ready(function() { $('.plus-button').click(function(){ var postid = <?php echo $postloo
<script type="text/javascript">
$(document).ready(function() {
$('.plus-button').click(function(){
var postid = <?php echo $postloopid; ?>;
$('.minus-button').removeClass('disliked');
$(this).toggleClass('liked');
alert(postid);
$.ajax({
type:"POST",
url:"php/votesystem.php",
dataType : 'html',
data:'act=like&postid='+postid,
success: function(data){
$('.plus-button').html(data);
}
});
});
$('.minus-button').click(function(){
var postid = $(this).attr('id');
$('.plus-button').removeClass('liked');
$(this).toggleClass('disliked');
$.ajax({
type:"POST",
url:"php/votesystem.php",
dataType : 'html',
data:'act=dislike&postid='+postid,
success: function(data){
$('.minus-button').html(data);
}
});
});
});
</script>
$(文档).ready(函数(){
$('.plus按钮')。单击(函数(){
var postid=;
$('.减号按钮').removeClass('不喜欢');
$(this.toggleClass('liked');
警报(postid);
$.ajax({
类型:“POST”,
url:“php/votesystem.php”,
数据类型:“html”,
数据:'act=like&postid='+postid,
成功:功能(数据){
$('.plus button').html(数据);
}
});
});
$('.减号按钮')。单击(函数(){
var postid=$(this.attr('id');
$('.plus button').removeClass('liked');
$(this.toggleClass('disliked');
$.ajax({
类型:“POST”,
url:“php/votesystem.php”,
数据类型:“html”,
数据:'act=不喜欢&postid='+postid,
成功:功能(数据){
$('.减号按钮').html(数据);
}
});
});
});
Votebox.php
<?php
// If postid is from frontpage use $postloopid as $postid
if(isset($postloopid)){
$postid = $postloopid;
}
$postid = htmlentities($postid, ENT_QUOTES);;
include("connect.php");
//For test purposes
echo $postid;
// If user logged in show votebox
if(isset($_SESSION['username'])){
$userid = $_SESSION['userid'];
$sql2 = mysqli_query($connect,"SELECT * FROM posts WHERE id='$postid' AND deleted=0");
if($sql2){
$voterow = mysqli_fetch_assoc($sql2);
$checkupvote = $voterow['upvoters'];
$checkdownvote = $voterow['downvoters'];
$checkupvote = explode(" ",$checkupvote);
$checkdownvote = explode(" ",$checkdownvote);
if($checkupvote = array_search($userid,$checkupvote) == true){
echo '<div class="plus-button liked" name="like">+ ' . $voterow['totalupvotes'] . '</div>';
echo '<div class="minus-button" name="dislike">- ' . $voterow['totaldownvotes'] . '</div>';
}
elseif($checkdownvote = array_search($userid,$checkdownvote) == true){
echo '<div class="plus-button" name="like">+ ' . $voterow['totalupvotes'] . '</div>';
echo '<div class="minus-button disliked" name="dislike">- ' . $voterow['totaldownvotes'] . '</div>';
}
else{
echo '<div class="plus-button" name="like">+ ' . $voterow['totalupvotes'] . '</div>';
echo '<div class="minus-button" name="dislike">- ' . $voterow['totaldownvotes'] . '</div>';
}
}
else {
echo 'No result <br />';
}
}
else {
echo 'Cant find user';
}
?>
在
现在的问题是,当我单击votebox按钮时,我只从while循环中加载的第一篇文章中获取postid。我的另一个问题是,我对名单上所有帖子的总上下票数都发生了变化,而不是具体的帖子
有什么想法吗 好的,让我们来看看jQuery代码(与函数类似): 使用类
plus按钮将单击处理程序绑定到所有元素
$('.plus-button').click(function(){
var postid = <?php echo $postloopid; ?>;
$('.minus-button').removeClass('disliked');
$(this).toggleClass('liked');
alert(postid);
$.ajax({
type:"POST",
url:"php/votesystem.php",
dataType : 'html',
data:'act=like&postid='+postid,
success: function(data){
$('.plus-button').html(data);
}
});
});
使用classplus按钮设置所有元素的内部html
$('.plus-button').click(function(){
var postid = <?php echo $postloopid; ?>;
$('.minus-button').removeClass('disliked');
$(this).toggleClass('liked');
alert(postid);
$.ajax({
type:"POST",
url:"php/votesystem.php",
dataType : 'html',
data:'act=like&postid='+postid,
success: function(data){
$('.plus-button').html(data);
}
});
});
您想要的是将posted作为属性存储在posts上,然后使用
var postid = $(this).attr('postid')
仅从当前元素中删除不喜欢的类
$(this)
.parents('{element containing plus and minus button}')
.find('.minus-button')
.removeClass('disliked')
;
存储对已单击元素的引用
var $this = $(this); // Cool guys do this right in the beginning and use only this variable instead of $(this)
然后,在ajax成功处理程序中,您只需要设置所单击按钮的html,这样就可以使用存储在父函数作用域中的引用
$this.html(data);
针对无限滚动脚本进行编辑
当页面的某些部分是动态的时,您希望使用以下方法将单击处理程序绑定到动态内容的静态父元素:
$("#postsParent").on('click', '.plus-button', function () {/*handler*/})
Javascript代码不在循环中,它不能引用postloopid
。或者,如果是这样,则每次通过循环绑定类的所有按钮,单击它们将运行所有处理程序,并增加所有帖子
您应该将post ID作为数据字段放在按钮中,然后从Javascript访问该字段:
echo '<div class="plus-button liked" data-postid="'+$postid+'" name="like">+ ' . $voterow['totalupvotes'] . '</div>';
echo '<div class="minus-button" data-postid="'+$postid+'" name="dislike">- ' . $voterow['totaldownvotes'] . '</div>';
我对JS做了以下更改:
使用$(this).data('postid')
获取postid
仅从同级减号按钮中删除不喜欢的类,而不是页面上的所有减号按钮
将返回的HTML放在这个元素中,而不是放在所有的加号按钮中。我在上下文:
参数中传递这个
,以便success
函数可以引用它
看起来您正在使用html\u实体“转义”您的$postid,使用mysql\u real\u转义来执行此操作,html\u实体绝对不安全。您正在从posts
中选择所有行,然后从posts
中选择一行。这是另外10个不需要进行的查询(考虑到LIMIT
子句)。只需检查$row
是否设置在Votebox.php
的顶部,或者在单个文件中执行此操作。@LJ_1102 Thnx获取建议。@myninjaname我正在使用另一个不包括在该问题中的无限滚动脚本。除了@LJ_1102的注释,请参阅Uhm。。。我知道这是怎么回事,我很喜欢它,但是用class plus按钮对所有元素的点击处理程序是什么呢?你是说像?“点击处理程序”是上面讨论的方法,您的函数处理点击事件。不需要特殊的标记,也要确保只包含脚本一次,而不是每一行。实际上需要两个回复。现在开始工作了。非常感谢:)