javascript - Django ajax查看csrf失败并出现500错误

标签 javascript jquery ajax django

我有一个 Django View ,名为投票。它受到 @login_required 装饰器的保护,在正常使用中完全可以正常工作。

我认为开始研究 ajax 和 javascript 以使系统更加动态是一个值得的想法,因此我在第一次尝试中实现了如下所示的内容:

$(function() {
        $(".vote").click(vote);
});

var vote = function() {
            pk = $(this).attr('pk');

            $.ajax({
                type: "POST",
                data: "pk=" + $(this).attr("pk"),
                url: "/link/" + $(this).attr("pk") + "/vote/",
                });
        };

成功 POSTS 到正确的 URL。当我使用 firebug 查看输出时,我发现出现了 500 个错误。我已经包含了从 https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 中截取的内容进入我的页面,我原以为这可以解决 CSRF 问题,但似乎没有这样做。

想知道我是否遗漏了一些明显的东西!

谢谢!

最佳答案

事实证明我解决这个问题的方法是整理上面的内容:

var vote = function() {
        pk = $(this).attr('pk');

        data = {
            'pk': pk
        };

        $.ajax({
            type: "POST",
            data: data,
            url: "/link/" + pk + "/vote/",
            });
    };

整理完毕后,我检查了 View ,发现它没有从 ajax 传递给它的 DataDict 中提取出正确的值,这就是 500 错误的来源。

我之前遇到过由于 CSRF 问题而导致的 403 错误,对于那些想知道如何解决这个问题的人,我只是使用了上面问题中提到的脚本,保存在/static/js/中的“csrf.js”文件中我的应用程序的目录,然后将其包含为脚本之一,然后解决了该问题。

关于javascript - Django ajax查看csrf失败并出现500错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637099/

相关文章:

javascript - AngularJS $http.get 中的返回 promise ?

javascript - 带有 jQ​​uery ui 主题的自动样式复选框

javascript - 使用 Spring MVC 将值从 AJAX 传递到 Controller

javascript - 在 Javascript 中执行多个 ajax 调用

javascript - 手动加载扩展以及使用 Ajax 进行 renderPartial 的最佳实践

Javascript 事件监听器在对象方法中不起作用

javascript - 为什么我的导航栏在小屏幕上滚动时会向右移动一点?

java - 如何在点击<a>时刷新单个div?

jquery - 使用 jQuery "loader screen,"时,Bootstrap HTML 的其余部分未隐藏

javascript - 我应该如何为每个ajax函数调用相同的ajax路由url,即使它位于laravel 5.5中的另一个 Controller 中