【问题标题】:"Like" system PHP, using AJAX“点赞”系统PHP,使用AJAX
【发布时间】:2017-05-08 13:19:22
【问题描述】:

我想用 PHP 和 jQuery/AJAX 制作喜欢/不喜欢的系统..

这是我在 PHP foreach 中的表单...这里我为每个表单都有自己的 ID;

<?php foreach ($vid as $var) { ?>

<form class="classform" action="functions/videolike.php" method="post">
    <input type="text" name="id" value="<?php echo $var['video_id'];?>">
    <button class="submitbuttonclass"type="submit">Like</button>
</form> 
<?php } ?>

这是我的 Ajax 脚本;

<script>
// this is the id of the submit button
$(".submitbuttonclass").click(function() {
    $.ajax({
         type: 'post',
         url: "functions/videolike.php",
         data: $(".classform").serialize(), // serializes the form's elements.
         success: function(data)
         {
             alert(data); // show response from the php script.
         }
    });
    return false; // avoid to execute the actual submit of the form.
});
</script>
  1. 代码工作但不正确;
  2. 当我点击“赞”按钮运行良好时,我检查了数据库,计算、插入、删除,运行良好...
  3. 但是我想用 AJAX 来做这个,因为如果用户点击喜欢按钮,刷新页面会在用户观看视频时停止视频。由于页面刷新,视频正在预加载...
  4. 在我添加我的 ajax 脚本后,它就可以工作了。但是当我点击like按钮时,AJAX正在发布到PHP,只有f​​oreach循环中的最后一个id,

问题? 如何让 AJAX 获取 PHP foreach 循环中的所有 id?

如果你想查看,这是我的 videolike.php

<?php
session_start();
if($_POST['id'] && @$_SESSION["userid"]){

    require_once "connectdb.php";
    $id = $_POST["id"];


$VLcheck = "SELECT count(*) FROM `videolikes` WHERE user_id = ? AND liked_vid_id=?"; 
$reslike = $conn->prepare($VLcheck); 
$reslike->execute(array($_SESSION["userid"],$id));
$VLrow = $reslike->fetchColumn();
echo $VLrow;
if ($VLrow > 0){
    $VLcheck = "DELETE FROM `videolikes` WHERE user_id = ? AND liked_vid_id=?"; 
    $reslike = $conn->prepare($VLcheck); 
    $reslike->execute(array($_SESSION["userid"],$id));

} else {
    $curentsess= $_SESSION["userid"];
    $INSlike = $conn->prepare("INSERT INTO videolikes(user_id, liked_vid_id)
        VALUES('$curentsess','$id')");
    $INSlike->execute();


}} else {die;}  
?>

【问题讨论】:

  • 尝试通过更改.click 侦听器和函数开始来停止浏览器默认执行:$('.classform').on('click', 'button.submitbuttonclass', function(e) { e.preventDefault(); [... rest of function] });(也使用$(this).serialize() 而不是$('.class').serialize())我认为您错过了停止默认执行,因此您在服务器端获得的结果不是来自您的 $.ajax() 函数的结果。另外,您提到了一个 php foreach() 循环。但是,您的示例中没有。

标签: javascript php jquery ajax


【解决方案1】:

由于您有很多带有.classform 类的表单,所以您认为您的脚本应该如何选择合适的?

asnwer 是 - 脚本不能,你应该帮助它)。使用.closest 函数为点击的按钮找到最近的&lt;form&gt;

$(".submitbuttonclass").click(function() {
    var form = $(this).closest("form");
    // or find closest element with class `classform`
    //var form = $(this).closest(".classform");

    $.ajax({
         type: 'post',
         url: "functions/videolike.php",
         data: form.serialize(), // serializes the form's elements.
         success: function(data)
         {
             alert(data); // show response from the php script.
         }
    });
    return false; // avoid to execute the actual submit of the form.
});

【讨论】:

  • 我试过了...当我点击 LIKE 按钮时,我只是将我定位到 functions/videolike.php.. 如何停止这种定位
  • 我想你有 javascript 错误。检查开发者控制台中的问题。
  • 在控制台中我没有任何 javascript 错误。在我用你的脚本更改我的脚本后,你的脚本正在工作,但我的目标是 videolike.php,我想在没有任何页面刷新的情况下制作...
  • 工作正常,提醒结果,并且没有定位到 videolike.php,但唯一的错误是:AJAX 仅将 foreach 循环中的最后一个 id 发送到 PHP...但是当我单击检查元素时浏览器,我看到每个表单输入值都有一个自己的唯一 ID...在我添加脚本后,它不会提醒结果并将我重定向到 videolike.php...
  • 看我只使用这个来源:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2015-03-16
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多