2017-07-18 9 views
0

Ich bekomme diesen Fehler in der Konsole, wenn ich versuche, Daten mit Ajax zu posten. Diese Daten sollen an dieser URL bestätigt werden und dann sollte ich eine Antwort erhalten, die mehr Daten enthält.Django Jquery Ajax Cors Fehler

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). 

Ich benutze Django-Kors-Header als Middleware, um die Header hinzuzufügen. Ich habe alle Konfigurationsanweisungen befolgt.

Mein settings.py:

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

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

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

Der Ajax-Aufruf:

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

Die Daten und URL wird darüber erklärt und dieser Teil ist in Ordnung. Ich erhalte die Fehlermeldung immer, wenn ich sie einreiche.

Meine Pakete:

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

Ich bin auf Windows 10.

EDIT: Ich habe die csrfSafeMethod für Ajax hinzugefügt. Ich weiß nicht, ob das etwas damit zu tun haben könnte. Dieser Code wird von djangoproject bereitgestellt hier docs.djangoproject.com/en/1.11/ref/csrf

EDIT2: Ich intern einen Ajax-Aufruf zu senden endete so ist, dann habe ich das Cross-Domain-Zeug mit django mit urllib. This hat mir sehr geholfen, Daten über Domains zu veröffentlichen.

+0

'CorsMiddleware' wurde in der richtigen Reihenfolge hinzugefügt? – Grimmy

+0

[this] (https://stackoverflow.com/questions/6506897/csrf-token-missing-or-orrect-while-post-parameter-via-ajax-in-django) wird Ihnen wahrscheinlich helfen. – hansTheFranz

+0

@hanzTheFranz nah das ist nicht das Problem, – bernosbernus

Antwort

0

Gemäß der Dokumentation:

CorsMiddleware sollte so hoch wie möglich platziert werden, vor allem vor jegliche Middleware, die Antworten wie Djangos CommonMiddleware oder Whitenoise des WhiteNoiseMiddleware erzeugen kann. Wenn es nicht vorher ist, wird es nicht möglich sein, die CORS-Header zu diesen Antworten hinzuzufügen.

Ich würde Ihnen empfehlen, es als die erste Middleware (höchste) unter allen gegenwärtigen Middlewares zu setzen.

Referenz: https://github.com/ottoyiu/django-cors-headers

+0

Versucht, dass gleiche Fehler, jedoch habe ich verwendet Ein anderer Versuch. Weitere Informationen finden Sie am Ende der Frage unter EDIT2. – bernosbernus