ajax中的php变量不会改变值

时间:2017-07-25 11:21:17

标签: php ajax post

我在PHP文件的while循环中有一个按钮。 该按钮与PHP值相关联,该值随mysqli_fetch_array变化。 我在mysqli_fetch_array中只加载了3个值。  我的ajax函数中有数据,我的问题是它只接受第一行的值,而不接受其他行的值。实际上,函数在mysqli_fetch_array的第一行是正常的,似乎我的代码不在其他行上工作,就像PHP循环在第一行停止一样。

这是我的javscript代码(它在我的循环的同一页面上声明,之后):

<script type="text/javascript">
  $(document).ready(function() {
    $("#up").click(function() {
      var varno_commentaire = $("#no_commentaire").val();

      $.ajax({
        url: "upvoteCommentaire.php",
        type: "POST",
        data: {
          no_commentaire: varno_commentaire
        },
        async: false,
        success: function(result) {
          alert(result);
        }
      });
    });
  });

</script>

这是我的PHP循环:

<?php 
while($comm = mysqli_fetch_array($res2))
{
    echo
        '<label class="text-muted">'.$comm['desc_commentaire'].'</label>'.
            '<p>'.
        '<a href="">'.'@'.$comm['login'].'</a>'.
            '<p>'.
        '<label>'.$comm['vote_commentaire'].' points'.'</label>'.
            '<p>'.
        '<input type="text" value="'.$comm['no_commentaire'].'" id="no_commentaire"/>'.
        '<button class="btn btn-default" name="up" id="up">+</button>'.
            '&nbsp'.
        '<button class="btn btn-default" name="down" id="bold" onclick="downvote()">-</button>'.
            '<p>'.
        '<hr/>';
}
?>

我希望这很容易理解。任何帮助将不胜感激,我已经坚持了一会儿。非常感谢。

2 个答案:

答案 0 :(得分:0)

首先,您不能多次声明id。 ID应该是唯一的。您可以将ID传递给HTML属性。

你的循环:

<?php 
while($comm = mysqli_fetch_array($res2))
{
    echo
        '<label class="text-muted">'.$comm['desc_commentaire'].'</label>'.
            '<p>'.
        '<a href="">'.'@'.$comm['login'].'</a>'.
            '<p>'.
        '<label>'.$comm['vote_commentaire'].' points'.'</label>'.
            '<p>'.
        '<input type="text" value="'.$comm['no_commentaire'].'"/>'.
        '<button class="btn btn-default btn-up" data-id="'.$comm['no_commentaire'].'">+</button>'.
            '&nbsp'.
        '<button class="btn btn-default btn-down" data-id="'.$comm['no_commentaire'].'">-</button>'.
            '<p>'.
        '<hr/>';
}
?>

你的剧本:

<script type="text/javascript">
  $(document).ready(function() {
    $("button.btn-up").click(function() {
      var varno_commentaire = $(this).data('id');

      $.ajax({
        url: "upvoteCommentaire.php",
        type: "POST",
        data: {
          no_commentaire: varno_commentaire
        },
        async: false,
        success: function(result) {
          alert(result);
        }
      });
    });
  });

</script>

答案 1 :(得分:0)

ID只能在整个页面上使用一次。在您的情况下,PHP的while循环中的每个元素都具有相同的ID。因此,当您通过$("#no_commentaire").val()获取元素的值时,它会使第一个元素的值忽略页面上的其余元素。

您的问题的解决方案是拥有class而不是ID元素,并通过jQuery中parent child的相关性访问相同的元素。因此,您只能获得所选/点击的部分的值。

您的PHP代码看起来像这样,

<?php 
while($comm = mysqli_fetch_array($res2))
{
    echo
        '<div class="parent-class">'.
        '<label class="text-muted">'.$comm['desc_commentaire'].'</label>'.
            '<p>'.
        '<a href="">'.'@'.$comm['login'].'</a>'.
            '<p>'.
        '<label>'.$comm['vote_commentaire'].' points'.'</label>'.
            '<p>'.
        '<input type="text" value="'.$comm['no_commentaire'].'" class="no_commentaire"/>'.
        '<button class="btn btn-default up" name="up">+</button>'.
            '&nbsp'.
        '<button class="btn btn-default" name="down" id="bold" onclick="downvote()">-</button>'.
            '<p>'.
        '</div>'.
        '<hr/>';
}
?>

和jQuery代码看起来像这样,

<script type="text/javascript">
  $(document).ready(function() {
    $(".up").click(function() {
      var varno_commentaire = $(this).parent().child(".no_commentaire").val();

      $.ajax({
        url: "upvoteCommentaire.php",
        type: "POST",
        data: {
          no_commentaire: varno_commentaire
        },
        async: false,
        success: function(result) {
          alert(result);
        }
      });
    });
  });

</script>