【问题标题】:Ajax post requests 403 error only for some users?仅针对某些用户的 Ajax 发布请求 403 错误?
【发布时间】:2020-12-28 02:47:57
【问题描述】:

我通过让朋友试用我的网站来测试我的网站,有些朋友在使用 ajax 的任何功能上都会遇到 403 Forbidden 错误。我很困惑为什么只有一些人得到错误,尤其是当每个人都使用相同的浏览器时。有谁知道为什么?我使用 Django 作为框架,我想我已经完成了文档 here

中的所有操作

我使用 ajax 的函数之一示例:

$('#button').click(function(){
        $.ajax({
            url: '/get_url/',
            type: "POST",
            data: {
                data_name: data_to_send
            },
            beforeSend: function (xhr) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            },
            success: function (data) {
                //change some html text using data
            },
            error: function (error) {
                console.log(error);
            }
        });
    });

【问题讨论】:

  • 如何“不工作”,你有错误或回溯?
  • 你能显示你的 data_to_send 吗?而且我看到您没有在请求中发送您的数据类型。这会使你的 Ajax 无法正常工作。检查此文档api.jquery.com/jQuery.post
  • 他们收到 403 Forbidden 错误。
  • Tran,data_to_send 只是一堆数组。全部分开,但我在这里只用一个变量表示所有这些。我会调查数据类型的事情。

标签: javascript jquery django ajax


【解决方案1】:

使用这个:

$('#button').click(function(){
    $.ajax({
        url: '/get_url/',
        type: "POST",
        data: {
            data_name: data_to_send
        },
        headers: {
            "X-CSRFToken": "{{ csrf_token }}",
        },
        success: function (data) {
            //change some html text using data
        },
        error: function (error) {
            console.log(error);
        }
    });
});

【讨论】:

  • 您在哪里使用此代码?在独立的 js 文件中还是在模板文件中?
  • {{ csrf_token }} 仅在模板文件中工作,要将 csrf_token 值传递给 main.js,您应该使用如下形式:headers: { "X-CSRFToken": $(this).find('input[name="csrfmiddlewaretoken"]').val(), }
【解决方案2】:

通过确保我的所有表单标签都有 method='post' 和 {{ crsf_token }} 来修复。

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2014-01-25
    相关资源
    最近更新 更多