2017-07-18 88 views
0

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

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作为中间件来添加标题。我遵循了所有的配置说明。

我的settings.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'); 
     } 
    }); 

的数据和网址,上面这个声明,这部分是好的。 我每次提交时都会收到错误提示。

我的包:

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

我在Windows 10

编辑:我添加了csrfSafeMethod阿贾克斯。我不知道这可能与它有什么关系?此代码是由djangoproject提供这里docs.djangoproject.com/en/1.11/ref/csrf

EDIT2:我结束了发送Ajax调用内部所以后来我做了跨域的东西用的urllib Django的。 This帮助我发布了跨数据域的数据。

+0

'以正确的顺序添加CorsMiddleware'? – Grimmy

+0

[this](https://stackoverflow.com/questions/6506897/csrf-token-missing-or-incorrect-while-post-parameter-via-ajax-in-django)可能会帮助你。 – hansTheFranz

+0

@hanzTheFranz恩这不是问题, – bernosbernus

回答

0

作为每文档:

CorsMiddleware应当能够产生如Django的 CommonMiddleware或白噪声的WhiteNoiseMiddleware响应的任何中间件置于尽可能高,尤其是 之前。如果之前不是 ,它将无法将CORS头添加到这些 响应中。

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

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

+0

试过,同样的错误,但我用一种不同的方法。查看EDIT2下问题末尾的更多信息。 – bernosbernus