javascript - 使用 Ajax 将可变数据作为帖子发送

标签 javascript php jquery ajax

我一直在研究一个问题,但我不知道如何解决它或解决方案是什么。我正在使用 infinityfree 在我的网站上工作作为免费用户。我正在创建一个简单的评论页面,用户可以在其中输入并用星星对其进行评分。评论被提交到我的数据库,文本是正确的,但星数没有被添加到 ($_POST["ratedIndex"]) .
当我试图回显变量 ratedIndex 时它是空的。它似乎没有按预期通过 Ajax 发送,我不知道为什么。警报不会触发,但在 chrome 检查元素的网络面板上会记录星星上的点击。希望我没有成为一个完整的笨蛋,因为我是创建网站的新手,所以我错过了一些必不可少的东西,任何帮助都是非常学徒的。
游戏信息.php:

<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST"){
        require_once 'DBConnect.php';

        $game;
        $user;
        $review;
        $userid;
        $ratedIndex;
    
        $stmt = $conn->prepare("INSERT INTO reviews(game, user, userid, review, indexStar) VALUES (?,?,?,?,?)");
        $stmt->bind_param("sssss",$game, $user, $userid, $review, $ratedIndex);
        $userid = $_SESSION["userid"];
        $game = $gameTitle;
        $user = $_SESSION["username"];
        $review = $_POST["uploadReview"];
        $ratedIndex = ($_POST["ratedIndex"]);

        $stmt->execute();
    }
?>

<?php
        $id = $_SESSION["userid"];
        $gamename = $gameTitle;
        $rowzero ="0";
        $sql_ifreviewexist ="SELECT * FROM reviews WHERE reviews.game=?";
        $exist = $conn->prepare($sql_ifreviewexist);
        $exist->bind_param('s', $gamename);
        $exist->execute();
        $res = $exist->get_result();
        $reviewexist_row = mysqli_num_rows($res);
if((isset($_SESSION["username"])) && ($reviewexist_row==$rowzero)) {
         echo ' <div id="noreviewsExists">
                <div class="instructions"><p>Write a review for '.$gamename.'</p></div>
                <form id="reviewForm" method="POST" action="">
                <textarea type="text" id="reviewTextarea" name="uploadReview"></textarea>
                <div class="reviewStars">
                <i class="fa fa-star" data-index="0"></i> 
                <i class="fa fa-star" data-index="1"></i> 
                <i class="fa fa-star" data-index="2"></i> 
                <i class="fa fa-star" data-index="3"></i> 
                <i class="fa fa-star" data-index="4"></i> 
                </div>
                <div id="submitReview">
                    <button id="submitButton" type="submit" form="reviewForm">Submit</button>
                </div>
            </form>
            </div>';
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var ratedIndex = -1;
    $(document).ready(function () {
        resetStarColors();

        $('.fa-star').on('click', function (){
            ratedIndex = parseInt($(this).data('index'));
            $.ajax({
                url: "gameInfo.php",
                method: "POST",
                dataType: 'json',
                data: {
                    ratedIndex: ratedIndex
                }, success: function (data){
                    alert("ok");
                }

            });
        });

        $('.fa-star').mouseover(function () {
            resetStarColors();

            var currentIndex = parseInt($(this).data('index'));
            setStars(currentIndex);
        });

        $('.fa-star').mouseleave(function () {
            resetStarColors();

            if(ratedIndex != -1)
                setStars(ratedIndex);
        });

    });
    
    function setStars(max) {
        for (var i=0; i <=max; i++)
                $('.fa-star:eq('+i+')').css('color', 'yellow');
    }

    function resetStarColors() {
        $('.fa-star').css('color', 'black');
    }

</script> 
编辑:
经过 ADyson 的一些洞察我做了这样的事情:
 $test = $_POST["ratedIndex"];
if((isset($_SESSION["username"])) && ($reviewexist_row==$rowzero)) {
echo '<div>'.$test.'</div>';
...}
当我点击星星时,它会出现在预览下的网络面板中 image
所以现在我更困惑的是为什么当我尝试将它插入表格时它不起作用。

最佳答案

我知道这不是该问题的正确答案,但它是一种替代方法,也许您会发现它有些帮助。我想出的解决方案是采用您的 jquery 给出的值并将其设置为 sumbit 表单内的一个不可见的输入值。

<form id="reviewForm" method="POST" action="">
                <textarea type="text" id="reviewTextarea"name="uploadReview</textarea>
                <div id="submitReview">
                <input type="hidden" id="jqValue" name="jqueryValue" value=""/>
                    <button id="submitButton" type="submit" form="reviewForm">Submit</button>
                </div>
然后取变量ratedIndex并将其提供给您的意见 jqValue像这样的值(value)
$('.fa-star').on('click', function (){
            ratedIndex = parseInt($(this).data('index'));
            $("#jqValue").val(ratedIndex);
        });
最后拨打您的 php $ratedIndex=$_POST["jqueryValue"];就像我说的,如果您遇到问题并且无法解决问题,这只是解决问题的另一种方法 ajax工作你可以用这个。我发帖是因为你可能没有想过这样做。

关于javascript - 使用 Ajax 将可变数据作为帖子发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69784286/

相关文章:

javascript - 在场景中渲染许多相似但不相同的网格

php - 当我尝试通过控制面板打开 xampp shell 时,应用程序无法正确启动 0xc0000142 错误

jquery - 在选项下拉列表中添加背景图片

java - 学习不同代码的最佳方法是什么?

javascript - 我可以使用哪些搜索选项来限制 marklogic 搜索 API 关键字搜索,使其不搜索提到的 json 属性值?

javascript - 如何执行并行请求并返回包含 Javascript 中所有并行响应的对象?

php - 如果未达到限制,我可以使用单个 MySQL 查询来选择不同的行,然后选择非不同的行吗?

php - 查询在 wp/gravity forms 数据库中找不到数据

javascript - jqGrid Sort - 浏览器因更大的数据而挂起

javascript - 使用固定的左标题列进行表格搜索