Django jquery ajax cors错误

Posted

技术标签:

【中文标题】Django jquery ajax cors错误【英文标题】:Django jquery ajax cors error 【发布时间】:2017-12-23 21:49:47 【问题描述】:

当我尝试使用 ajax 发布数据时,我在控制台中收到此错误。这个数据应该在这个 url 上得到确认,然后我应该得到一个包含更多数据的响应。

Cross-Origin Request Blocked: The Same Origin Policy disallows 
reading the remote resource at https://secure.paygate.co.za/payweb3/process.trans. 
(Reason: CORS header 'Access-Control-Allow-Origin'  missing).

我使用 django-cors-headers 作为中间件来添加标题。我遵循了所有的配置说明。

我的设置.py:

INSTALLED_APPS = [
    # ...
    'corsheaders',
    # ...
]

MIDDLEWARE = [
    # ...
    'corsheaders.middleware.CorsMiddleware',
    # ...
]

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
    'GET',
    'POST',
    'OPTIONS',
)

ajax 调用:

$.ajax(
        type: "POST",
        url: url,
        dataType: "json",
        data: data,
        success: function(data)
            alert('success');
        ,
        error: function(data)
            alert('error');
        
    );

数据和 url 在上面声明,那部分很好。 我每次提交时都会收到错误警报。

我的包裹:

Django==1.11.3
django-cors-headers==2.1.0
pytz==2017.2

我使用的是 Windows 10。

编辑:我为 ajax 添加了 csrfSafeMethod。我不知道这可能与它有关吗?此代码由 djangoproject 提供,此处为 docs.djangoproject.com/en/1.11/ref/csrf

EDIT2:我最终在内部发送了一个 ajax 调用,所以我使用 urllib 使用 django 进行了跨域处理。 This 在跨域发布数据方面帮助了我很多。

【问题讨论】:

CorsMiddleware 的添加顺序正确吗? this 可能会帮助你。 @hanzTheFranz 不,这不是问题, 你的网址是https://secure.paygate.co.za/payweb3/process.trans @Ykh 是的,这就是端点 【参考方案1】:

根据文档:

CorsMiddleware 应该放在尽可能高的位置,尤其是在 任何可以生成响应的中间件,例如 Django 的 CommonMiddleware 或 Whitenoise 的 WhiteNoiseMiddleware。如果不是 之前,它将无法将 CORS 标头添加到这些 回复。

我建议你把它作为目前所有中间件中第一个(最高)的中间件。

参考:https://github.com/ottoyiu/django-cors-headers

【讨论】:

试过了,同样的错误,但是我使用了不同的方法。在 EDIT2 下的问题末尾查看更多信息。

以上是关于Django jquery ajax cors错误的主要内容,如果未能解决你的问题,请参考以下文章

CORS 问题 - POST 时的 Access-Control-Allow-Origin 错误(Jquery Ajax)

如果修改 XHR,则 JQuery AJAX 请求失败并出现 CORS 错误

CORS - jQuery 获取 ajax 响应状态失败

Jquery Ajax Post 中的 CORS 问题

CORS jQuery AJAX 请求

从其他域(jquery ajax)访问托管在 aws ec2 上的 rest 服务但出现 CORS 错误