php - 如何将ajax回调发送到foreach循环生成的特定div

标签 php jquery ajax callback echo

是关于这样的情况:

下面是一些由 php 中的 foreach 循环生成的 html(评级星星)。所以我有很多带有 Rating 类的 div。 $file_id 是唯一的,并且在每个 div 中都不同!

<div class="rating" data-rating="<?php echo $round;?>">
    <div class="rating-stars">                  
        <a href="#5" class="click-trigger star-5" data-value="star-5" data-id="<?php echo $file_id; ?>" title="Vote 5 stars">&#x2605</a>
        <a href="#4" class="click-trigger star-4" data-value="star-4" data-id="<?php echo $file_id; ?>" title="Vote 4 stars">&#x2605</a>
        <a href="#3" class="click-trigger star-3" data-value="star-3" data-id="<?php echo $file_id; ?>" title="Vote 3 stars">&#x2605</a>
        <a href="#2" class="click-trigger star-2" data-value="star-2" data-id="<?php echo $file_id; ?>" title="Vote 2 stars">&#x2605</a>
        <a href="#1" class="click-trigger star-1" data-value="star-1" data-id="<?php echo $file_id; ?>" title="Vote 1 star">&#x2605</a>
    </div>
    <div class="rating-votes">
        Average: <span id="count-avg"><?php echo $avg;?></span> Votes: <span id="count-total"><?php echo array_sum($count);?></span>
    </div>

</div>

我的 jquery ajax 看起来像这样:

$('.click-trigger').on('click', function(e) {
    e.preventDefault(); 

    var value = $(this).data('value');
    var file_id = $(this).data('id');

    $.ajax({
        url: 'counter.php',
        type: 'POST',
        data: { 
            value:value,
            file_id:file_id         
            },
        success: function(data){
            $('.rating-votes').html(data);

        }
    });

});

文件 counter.php 将此 echo 作为回调:

echo '<div class="text-success">Thanks for voting!</div>';

问题是:在每个具有 . rating-votes 类的 div 中都会出现 echo 。但它应该只出现在点击其中一颗评级星星的 div 中。

我怎样才能实现这个目标?

最佳答案

要解决此问题,您需要使用 jQuery 的 DOM 遍历方法来检索与单击的开始相关的 . rating-votes 元素。在本例中,请使用 closest()next()

另请注意,您应该通过将单个公共(public)容器上的 data-id 属性放入 .click-trigger 元素来干燥代码,而不是在每一个。试试这个:

<div class="rating" data-rating="<?php echo $round;?>">
  <div class="rating-stars" data-id="<?php echo $file_id; ?>">
    <a href="#5" class="click-trigger star-5" data-value="star-5" title="Vote 5 stars">&#x2605</a>
    <a href="#4" class="click-trigger star-4" data-value="star-4" title="Vote 4 stars">&#x2605</a>
    <a href="#3" class="click-trigger star-3" data-value="star-3" title="Vote 3 stars">&#x2605</a>
    <a href="#2" class="click-trigger star-2" data-value="star-2" title="Vote 2 stars">&#x2605</a>
    <a href="#1" class="click-trigger star-1" data-value="star-1" title="Vote 1 star">&#x2605</a>
  </div>
  <div class="rating-votes">
    Average: <span id="count-avg"><?php echo $avg;?></span> Votes: <span id="count-total"><?php echo array_sum($count);?></span>
  </div>
</div>
$('.click-trigger').on('click', function(e) {
  e.preventDefault();
  let $star = $(this);
  let $container = $star.closest('.rating-stars');

  $.ajax({
    url: 'counter.php',
    type: 'POST',
    data: {
      value: $star.data('value'),
      file_id: $container.data('id')
    },
    success: function(data) {
      $container.next('.rating-votes').html(data);
    }
  });
});

关于php - 如何将ajax回调发送到foreach循环生成的特定div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60747647/

相关文章:

javascript - 单击现有的个人资料图片以上传和更改图像。

php - 将用户密码发送到他的电子邮件...使用 php

php - 如何将函数类中的单个值返回到 foreach 循环中

php - 我可以在命令行中远程连接到 mySQL 数据库,但不能使用 php 脚本

javascript - 是否可以使用 html css 和 jquery 创建具有多列的下拉菜单(如大型菜单)而不使用任何插件?

javascript - 在按钮上使用 'this' 的 jQuery 选择

javascript - 如何在jquery中分割ajax的Response html

php - 使用关键字以编程方式执行谷歌搜索

jquery - 无法从 JQuery ajax 调用接收 JSON

javascript - 如何使用jquery ajax从复选框和输入中获取值