【问题标题】:why post doesnt do anything为什么帖子没有做任何事情
【发布时间】:2011-07-25 06:37:41
【问题描述】:

大家! 我正在编写一个简单的 django 应用程序。其中一个页面上有脚本,该脚本适用于按钮单击并使用 ajax 发布。 问题是:post 方法不会导致服务器代码的执行,只是每次出错时执行函数。

脚本:

<script type="text/javascript">
    (function($) {
        $(document).ready(function(){
            {% for obj in cl.result_list %}
                $('#done_{{ obj.pk }}').click(function() {
                    if ($(this).html().indexOf("icon-yes") != -1) {
                        $action = "no";
                    }
                    else {
                        $action = "yes";
                    }
                    $.ajax({
                                type: "POST",
                                url: "/on_hold_done/done/" + $action + "/{{ obj.pk }}/",
                                success: function(response) {
                                    alert("success")
                                },
                                error: function(response) {
                                    alert("error")
                                }
                            })
                });
            {% endfor %}
        });})(django.jQuery);
</script>

在 urls.py 中:

(r"^on_hold_done/(on_hold|done)/(yes|no)/(\d*)/$", "todo.views.on_hold_done")

在views.py中:

@staff_member_required
def on_hold_done(request, mode, action, pk):
    """simple code here"""
    return HttpResponse('')

【问题讨论】:

  • 使用 Firebug 查看您从服务器获得的响应。
  • $action 变量看起来可能会导致问题,因为 $ 在 jQuery 中具有特殊功能。
  • @Bjorn:命名变量$action 不是问题。 JavaScript 变量可以包含$ 字符。 $ 变量只是对jQuery 的引用。
  • @blazkovicz:看起来问题已解决,下面的答案(或其讨论)提供了部分或全部解决方案 - 您能否接受或提供您认为更好地回答问题的新答案?

标签: jquery ajax django post


【解决方案1】:

如果您使用的是 Django 1.3,请注意所有 AJAX 请求现在都受到跨站点请求伪造保护,因此您需要添加一些额外的 JS 以在您的 ajax 提交中自动包含 CSRF 令牌。 See the docs here

【讨论】:

  • 谢谢,我在解决问题时也遇到了同样的问题。问题的原因确实是没有使用 CSRF。 url解析也有问题。
  • 谁能解释一下我应该做什么才能通过 CSRF?我找不到任何代码示例。 djangoproject 的解决方案对我不起作用,因为响应中有一段 html,而不是文档或 httpresponce。
  • 添加此处提到的 JS docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax - 这将自动将 CSRF 令牌作为附加标头插入到您的 AJAX 请求中
  • 我试过这段代码,它没有帮助,但stackoverflow.com/questions/5100539/…的解决方案有。
猜你喜欢
  • 2021-08-11
  • 2021-12-20
  • 2015-06-30
  • 2023-04-06
  • 2021-04-10
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多