2017-01-25 3 views
1

Ich habe ein Skript, das die UPS-Tracking-Nummer des Benutzers übernimmt und die Tracking-Informationen von der UPS JSON Tracking API zurückerhält durch eine domainübergreifende AJAX-Anfrage (mit jQuery.ajax). Bis vor zwei Wochen hat alles perfekt funktioniert.Domain-übergreifendes Ajax-Werfen Kein 'Access-Control-Allow-Origin'-Headerfehler, aber Netzwerkregister zeigt Antwortdaten

Dann, aus heiterem Himmel, scheitert jede Anfrage aufgrund der berüchtigten "Nein 'Access-Control-Allow-Origin' Header ist auf der angeforderten Ressource vorhanden." Error.

Die Sache ist, die Anfrage ist immer noch richtig durchkommen. Wenn ich die Registerkarte "Netzwerk" in den Chrome-Entwicklungstools überprüfe, kann ich in den Kopfzeilen einen Statuscode von 200 sehen. Wenn ich auf die Tabs Vorschau oder Antwort klicke, kann ich die korrekte JSON-Antwort sehen, die zurückgegeben werden soll.

Vor allem bin ich ratlos, wie ich eine angemessene Antwort bekomme, wenn meine Herkunft nicht erlaubt ist. Zweitens, gibt es eine Möglichkeit, diesen Fehler passieren zu lassen und dennoch Zugriff auf die Antwort zu erhalten? Ich habe versucht, das xhr-Objekt von den Callbacks "error" und "complete" (mit jQuery.ajax) zu bekommen, aber ich kann nur auf das error-Objekt zugreifen.

Mein Code:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: url, 
    data: json, 
    success: function(data){ 
      cb(data); 
    }, 
    error: function(xhr, status, error){ 
     console.log(xhr, status, error); 
     // logs: {readyState: 0, responseText: "", status: 0, statusText: "error"} 
    }, 
    complete: function(xhr, status){ 
     console.log(xhr, status); 
     // also logs: {readyState: 0, responseText: "", status: 0, statusText: "error"} 
    } 
}); 
+0

Same Origin Policy, können Sie keine anderen Domänen zugreifen, wenn sie dich lassen. – epascarello

+0

* "Zweitens, gibt es eine Möglichkeit, diesen Fehler passieren zu lassen und dennoch Zugriff auf die Antwort zu erhalten?" * ** Nein. ** Sie müssen das CORS-Problem beheben, das vor zwei Wochen eingeführt wurde. –

+0

Vielleicht hat UPS kürzlich etwas geändert. Es scheint einige Entwickler-Dokumentation zu geben, die Sie von https://www.ups.com/upsdeveloperkit herunterladen können, die möglicherweise aktuelle Informationen enthalten. – sideshowbarker

Antwort

1

in der Tat ist es ein Problem der Cross-Domain ist, dass Sie mehrere Lösungen zur Behebung haben:

Lese über Cross-Domain: CORS

an den Header hinzugefügt Ihrer Anfrage

Access-Control-Allow-Origin: * 

Oder erlaubt die Cross-Domain in th e-Browser Sie verwenden:

Chromium-browser --disable-web-security --user-data-dir 

Auf Safari:

Development > Disable Multi-Origin restriction