传递给Javascript函数的变量没有变化

时间:2013-09-27 13:10:10

标签: javascript php jquery ajax web

我正在尝试实施一项功能,用于报告网站上的评论。我正在使用PDO并在PHP类中使用该函数。

当点击'report'时,调用JS函数,该函数使用Ajax然后调用PHP函数,该函数将更新数据库/向管理员发送电子邮件。

我看不出原因,但传递给JS的id总是一样的。

我已经完成了各种输出测试,在HTML中,id是正确的。目前我正在测试3种不同的。当我在函数中提醒id时它始终是相同的。

非常感谢任何帮助。

HTML:

<? foreach ($comments as $c){
   $commentId = $c['id']; ?>
     <p><a href="#" id="report" name="report" data-value="<?php echo $commentId ?>" onclick="reportComment(); return false;">Report?</a></p>
<? } ?>                 

JS:

function reportComment(){

var id = $('#report').attr('data-value');
var url = "/Perspect/commentsAjax/report.php";
var params = {id: id};

$.ajax({
    cache: false,
    type: 'POST',
    url: url,
    data:params,
    dataType:'json',

    success: function(){
        alert("sucess");
        //change ahref to say this comment has been reported
    },
    error: function(error){
        console.log(error);
    }
});
alert("ID" + id);
}

PHP:

<?php include '../core/init.php';

if($_POST){
  $id = $_POST['id'];
  $articleComments->reportComment($id);
}
?>

1 个答案:

答案 0 :(得分:3)

问题在于您的所有链接共享相同的id="report",因此您无法访问其中的一个(但JS会自动选择第一个外观)。这可以通过简单地将id作为参数传递来解决。

<p><a href="#" name="report" onclick="reportComment(<?php echo $commentId; ?>); return false;">Report?</a></p>
//...
function reportComment(id){

如果要在单击后操作元素,可以像下面这样操作

<? foreach ($comments as $c){
   $commentId = $c['id']; ?>
     <p><a href="#" id="report_<?php echo $commentId ?>" name="report" onclick="reportComment(<?php echo $commentId ?>); return false;">Report?</a></p>
<? } ?>

现在您有唯一的ID report_1report_2等等,您的JS可能如下所示

function reportComment(id){
    //do your stuff
    $("#report_"+id).text("already reported");

正如您的问题评论中所建议的,这也可以仅使用JavaScript(借助jQuery)解决,您不需要HTML中的onclick逻辑

<a class="report" data-value="1">report</a>
<a class="report" data-value="2">report</a>

这可能是JS

$(".report").click(function(){
    var id = $(this).attr('data-value');
    //do your magic
    $(this).text('already reported');
});