【问题标题】:Use PHP variable in AJAX在 AJAX 中使用 PHP 变量
【发布时间】:2013-11-06 04:41:47
【问题描述】:

我正在尝试在“videos.php”页面上完成以下操作(注意,这都是在 PHP 回显中):

  1. 用户点击.star_'。 $pvid_ID 。 ' 将视频评级提交到表单(这工作正常)
  2. 现在,我需要刷新显示当前视频评分的 div 以显示更新后的视频评分,该评分存储在变量 $avg_rating 中(在较早的视频查询中从数据库中获取.php)。
  3. 要更新变量 $avg_rating,我想将视频的 ID 发布到 find_ratings2.php(该视频 ID 当前存储在“videos.php”中作为 $pvid_ID)

这是我在“videos.php”上的 jquery/ajax:

echo'
<script type="text/javascript" language="javascript">
$(document).ready(function() {
   $(".star_' . $pvid_ID . '").click(function() {
       $.ajax({
           type: "POST",
           url: \'/dev/scripts/find_ratings2.php\',
           data: { videoid: ' . $pvid_ID . ' },
           success: function(data) {
               $(".parent_video_' . $pvid_ID . '").load(\'testratings.php .vid_frame_id_' . $pvid_ID . '\').hide().fadeIn(2000);
            }
        });
    });
});                        
</script>
';

然后,在 find_ratings2.php 上我有:

<?php
require('config.php');
require('checklogin.php');

$video_id = $_POST['videoid'];
$mysqlicon3 = mysqli_connect($db_host, $db_username, $db_password, $db_name);
$find_rating = mysqli_query($mysqlicon3, "SELECT AVG(rating) AS avgRating FROM videoRatings WHERE videoID = '$video_id'");

while ($rating_row = mysqli_fetch_array($find_rating)) {
    $avg_rating = $rating_row['avgRating'];
}
?>

.star_' 。 $pvid_ID 。 ' 被点击,div 被正确刷新(.hide() 和 .fadeIn() 也在工作),但 $avg_rating 没有被更新。

作为参考,$avg_rating 位于“videos.php”上,如下所示:

echo'
<div class="parent_video_' . $pvid_ID . '">
    <div class="comment_iconimg-stars vid_frame_id_' . $pvid_ID . '">
        <div class="video-stars"><input class="imgstar star_' . $pvid_ID . '" type="image" src="';
        if ($avg_rating > 0){echo '/dev/images/rate_video_icon_yellow.png';} else{echo '/dev/images/rate_video_icon.png';}
        echo '" border="0" /></div>
        </div>
    </div>
</div>';

【问题讨论】:

  • 第一个建议,基本的 HTML 和 JavaScript 代码不应由 PHP 打印。它对 PHP 解析器无用,对可维护性非常不利
  • 它仅作为 PHP 回显打印,因为它是打印来自特定查询的所有结果的“while”语句的一部分

标签: javascript php jquery ajax


【解决方案1】:

虽然在您的代码中发现了多个问题,但如@MatRt 所示,除了来自 php 的 echo html/js 之外。仍然存在一个问题,为什么 $avg_rating 变量没有更新,因为 $avg_rating 变量从页面加载不是来自 ajax 请求以来采用其初始值。您需要从类似的 javascript 中更新它。

if(data > 0)
{ 
    $("video-stars input.imgstar").attr('src', '/dev/images/rate_video_icon_yellow.png');   
}
else
{
    $("video-stars input.imgstar").attr('src','/dev/images//dev/images/rate_video_icon.png');   
}  

最后在 find_ratings2.php 中也回显 $avg_rating。

【讨论】:

    【解决方案2】:

    关闭 PHP 结束标签并添加 javascript 代码:

    <script type="text/javascript" language="javascript">
    $(document).ready(function() {
    
       var pvid = "<?php echo $pvid_ID; ?> ";
    
       $(".star_' + pvid + '").click(function() {
           $.ajax({
               type: "POST",
               url: \'/dev/scripts/find_ratings2.php\',
               data: { videoid: ' + pvid +  ' },
               success: function(data) {
                   $(".parent_video_' + pvid +  '").load(\'testratings.php .vid_frame_id_' . + pvid +  '\').hide().fadeIn(2000);
                }
            });  });});                        
    </script>
    <?php some code ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多