【问题标题】:I'm having trouble with my Jquery-Ajax upvoting code我的 Jquery-Ajax 投票代码有问题
【发布时间】:2017-05-07 13:08:47
【问题描述】:

在我的项目中,可以对帖子进行投票。当我不使用 Jquery-Ajax 时,这很好用。不过,它会重新加载页面,我不希望这样。

我实现了一些 Jquery-Ajax 来执行 POST 请求,并将按钮更新为 upvoted。不幸的是,这会导致列表中的所有帖子都被点赞,而不仅仅是我点击的帖子。

让我向您展示 HTML(在循环的帖子列表中):

{% for post in posts %}
{{ post.title }}
<hr>
{{ post.content }}
{% with user=request.user %}
    <a class="upvote" data-postid="{{ post.id }}"  href='#' >
        <span class="btn btn-primary" aria-hidden="true">
            Upvote | {{ post.followers }}
        </span>
    </a>

        {% endwith %}
        {% endfor {%

这是赞成和赞成按钮的 HTML。

这是我的 Jquery 脚本:

<script src="{% static 'posts/jquery-3.1.1.js' %}"></script>

<script type="text/javascript">
$(".upvote").click(function(event){
var postid = $(this).data('postid');
$.ajax({url: "/activity/follow/10/{{ post.id }}?next={{ request.path }}&postid=" + postid, success: function (data) {
     event.preventDefault();

    $(".upvote").addClass('hidden');

    }


});

});
    </script>

总而言之,我如何让这个功能只对我点击的帖子投票,而不是对列表中的每个人都投票?谢谢!

【问题讨论】:

  • 每个点赞按钮的帖子 ID 在哪里?您需要在.click() 函数中获取它,并将其作为参数发送到服务器。
  • 抱歉,不知道 django,所以我不知道你如何将它编码成 {%...%} 的东西。
  • data-postid="{% post.id %}"添加到锚点,然后可以在.click()函数中做var postid = $(this).data('postid');,并将帖子ID添加到URL。
  • 您没有将postid 发送到服务器。您需要将其添加为 URL 参数。
  • "{% follow_url post %}?next={{ request.path }}&amp;postid=" + postid。然后更改服务器脚本以更新$_GET['postid']的投票计数

标签: jquery python html ajax django


【解决方案1】:

您需要将 postid 变量放入控制器 URL,而不是 {{post.id}}。 Javascript 代码不应在循环中,因此它无权访问 post 变量。

$(".upvote").click(function(event){
    event.preventDefault();
    var postid = $(this).data('postid');
    var $this = $(this);
    $.ajax({
        url: "/activity/follow/10/" + postid + "?next={{ request.path }}", 
        success: function (data) {
            $this.addClass('hidden');
        }
    });
});

【讨论】:

  • 谢谢-这看起来不错!不幸的是,该 URL 不起作用。当我用{{ post.id }} 替换“+ postid +”时没关系,但随后它再次支持所有帖子。否则,它什么也做不了。您认为问题可能出在锚点上吗? ---> data-postid='{{ post.id }}'我已经按照你说的做了一切,所以我不确定我仍然做错了什么。
  • 查看源代码时,您是否在 HTML 中看到正确的帖子 ID?除此之外,我看不出有什么问题。
  • @Bamar 是的,这是正确的帖子 ID。它在 URL 中正确写入,对 - 它应该是 postid 而不是 data-postid?
  • 使用浏览器控制台中的网络选项卡查看正在发送的 AJAX 请求。里面有正确的帖子 ID 吗?
  • 奇怪,ID是正确的,但是控制台显示404:jquery-3.1.1.js:9536 GET http://127.0.0.1:8000/activity/follow/10/19?next=/posts/topic/2/ 404 (Not Found)
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2012-05-05
相关资源
最近更新 更多