【问题标题】:AJAX change comment on table row clickAJAX 更改表格行点击注释
【发布时间】:2015-09-02 03:18:59
【问题描述】:

我目前正在开发一个网络应用程序,演示如何在 ASL 中“签名”不同的单词。左侧是术语列表,右侧是视频和评论部分。

在此处查看屏幕截图:http://i917.photobucket.com/albums/ad19/brycematheson/Screen%20Shot%202015-06-16%20at%2010.05.36%20PM.png

每当单击新术语时,我都在努力让 cmets 使用 AJAX 进行更改。目前,在选择新术语时,cmets 保持不变。如何使用AJAX进行若要更改注释部分以在选择新术语时更新?

我的评论部分看起来像这样。更新 PHP 中的 $id_post=3 部分将更改注释以匹配数据库中具有该 ID 的 cmets,所以这不是问题,我只需要它即时执行。

这是我在 index.php 页面中的评论代码:

<?php 
                // Connect to the database
                require_once('models/db-settings.php'); 
                $id_post = '$_POST['rowID']; //the post or the page id
                ?>
                <div class="cmt-container">
                    <?php 
                    $sql = mysqli_query($mysqli, "SELECT * FROM comments WHERE id_post = '$id_post' ORDER BY id ASC") or die(mysqli_error($mysqli));
                    while($affcom = mysqli_fetch_array($sql,MYSQLI_ASSOC)) {
                        $id = $affcom['id'];
                        $name = $affcom['name'];
                        $email = $affcom['email'];
                        $comment = $affcom['comment'];
                        $date = $affcom['date'];

                        // Get gravatar Image 
                        // https://fr.gravatar.com/site/implement/images/php/
                        $default = "mm";
                        $size = 35;
                        $grav_url = "http://www.gravatar.com/avatar/".md5(strtolower(trim($email)))."?d=".$default."&s=".$size;

                    ?>
                    <div class="cmt-cnt">
                        <img src="<?php echo $grav_url; ?>" />
                        <div class="thecom">
                            <h5><?php echo ucfirst($name); ?></h5><span data-utime="1371248446" class="com-dt"><?php echo $date; ?></span>
                            <br/>
                            <p>
                                <?php echo $comment; ?>
                            </p>
                            <div style="float:right;"><span class="action"><a href="#" id="<?php echo $id; ?>" class="delete" title="Delete">X</a></span></div>
                        </div>
                    </div><!-- end "cmt-cnt" -->
                    <?php } ?>


                    <div class="new-com-bt">
                        <span>Write a comment ...</span>
                    </div>
                    <div class="new-com-cnt">
                        <textarea class="the-new-com"></textarea>
                        <div class="bt-add-com">Post comment</div>
                        <div class="bt-cancel-com">Cancel</div>
                    </div>
                    <div class="clearfix"></div>
                </div>

还有我的 Javascript:

 $('#matrix tr').click(function (event) {
      var rowID = ($(this).attr('id')); //trying to alert id of the clicked row          
    $(function(){
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'index.php', 
                data: rowID,
                success: function(msg) {
                }
           });
       });
    });

我做错了什么?我错过了什么吗?

提前致谢。

【问题讨论】:

  • 这是错字吗?:'$_POST['rowID'];

标签: php jquery html ajax reload


【解决方案1】:

页面返回给您后,您实际上并没有对页面进行任何操作

success: function(msg) {
}

当 ajax 成功完成后,该函数内的代码将执行,页面返回的任何内容都将在 msg 参数内。

success: function(msg) {
    $('#comments-container').html(msg);
}

这将用 ajax 请求返回的任何内容完全替换具有 id="comments-container" 的元素的内容。

您可能会正确阅读 jQuery AJAX 文档页面并学习一些示例。 http://api.jquery.com/jquery.ajax/

一旦你解决了你会遇到仍然不会改变的问题,这是因为你没有发送格式正确的 POST 数据。

data: rowID,

为了像您尝试的那样访问 POST 数据(使用 $_POST[key]),POST 数据还需要在键值对中。

data: "rowID=" + rowID,

阅读 $_POST 超全局的 PHP 手册页上的 cmets 以更好地理解这一点。 http://php.net/manual/en/reserved.variables.post.php

编辑:哦,如果你打算向公众发布这个网站,你可能想看看 SQL 注入以及如何强化你的网站来对抗它。就目前而言,这很容易被攻破,您的数据库也会受到损害。

【讨论】:

  • 非常感谢您的帮助。这是最终起作用的代码:success: function(msg) { $("#cmets").html($("#cmets",$(msg)).html());但是,现在我遇到了另一个问题。似乎输入这个 JavaScript 已经破坏了我的其他一些 JavaScript。单击 cmets 旁边的“X”现在不再触发 javascript 代码来删除该特定评论。此外,似乎每当我现在单击“写评论”时,文本区域不再像以前那样出现。这两个 Jquery/JS 有冲突吗?
  • 也许我应该再澄清一点:当页面第一次加载时,如果我选择写或删除评论,我可以成功。但是一旦我选择了一个新术语并且 cmets 会动态更新,我就无法再发表评论或删除评论了。
  • @user2985455 我冒昧地猜测您在更新容器时不小心替换了一些处理这些功能的 javascript。不过,最好在一个单独的问题中提出这个问题,因为它会帮助有类似问题的人在未来寻找答案。另外,如果此答案对您有所帮助,请不要忘记标记为最佳答案:)
猜你喜欢
  • 2011-11-05
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多