2016-06-30 10 views
1

Ich entwickle eine AngularJS-Web-App und teste die App lokal, z. Es ist nicht auf einem Server. Ich laufe weiter in den folgenden Fehler:CORS-Header 'Access-Control-Allow-Origin' fehlt mit AngularJS Web App

Cross-Origin-Anfrage blockiert: Die gleiche Herkunft Richtlinie verbietet das Lesen der Remote-Ressource bei (Grund: CORS-Header 'Access-Control-Allow-Origin' fehlt) .1 (unbekannt)

Meine SO-Forschung sagt mir, dass dies ein Fehler auf der Serverseite ist, aber ich habe erfolgreich Daten aus meiner iOS App im Simulator abgerufen und Postman mit Erfolg verwendet.

Per Vorschlag führe ich die App über http-Server. Gleicher Fehler.

Ich habe einen einfachen Testfall mit dem gleichen Ergebnis:

$http.get("http://www.yahoo.com") 
.then(function (response) { 
    alert("Search Results: " + response); 
}, function(error) { 
    alert("Could not get to Yahoo"); 
}); 

Dieses völlig rätselhaft ist.

+1

Was meinst du, "lokal"? Sie benötigen einen HTTP-Server, um AJAX-Anfragen zu bearbeiten. Wenn Sie eine Seite aus einer Datei laden: /// url, dann können Sie keine ajax-Anfragen an Server senden. –

+0

^async-Anfragen können nicht ausgeführt werden, wenn Ihr Browser HTML von einem direkten Dateipfad rendert. Wenn Sie einen lokalen Server unter Verwendung von node/apache/python/etc. ausführen, können Sie CORS-Header auf Ihrem lokalen Server aktivieren, die Sie dann auf Ihrem Produktionsserver replizieren sollten. Eine weitere wichtige Frage: Entwickeln Sie mit Angular 1 oder Angular 2? – trickpatty

+0

auch, wie kommt iOS ins Spiel mit Ihrer Architektur? entwickelst du eine Angular 2 + nativescript App? oder eine ionic + Angular 1 App? Und wenn dies der Fall ist, auf welchem ​​Server versuchen Sie asynchrone Anfragen zu stellen und welche Umgebung hat dieser Server? – trickpatty

Antwort

1

auf diesen Kommentar Basierend:

I'm developing an AngularJS web app and I'm testing by running the app locally, e.g. it's not on a server

Dann ist der Grund, warum dies nicht funktioniert, liegt auf der Hand: Sie können nicht asynchrone Aufrufe an Server in Javascript mit den meisten modernen Browsern standardmäßig, wenn Sie JavaScript von einem nicht ausgeführt werden Webserver (http: // anstelle von file: ///). Dies ist eine Sicherheitsmaßnahme, die in praktisch allen Browsern integriert ist. Sie könnten dies umgehen, indem Sie den Browser mit bestimmten Flags starten. zum Beispiel mit Chrome könnten Sie von der Befehlszeile

ausführen, aber es ist empfehlenswert, dass Sie nur das Javascript von einem Webserver ausführen. Dies ist sehr einfach zu tun, können Sie das Knotenpaket http-server oder Pythons SimpleHTTPServer verwenden, um die Dateien direkt aus dem Verzeichnis sie sind in.

+0

Ich habe herausgefunden, wie man CORS mit einer Chrome-Erweiterung deaktiviert, vielen Dank für die Antworten. – Ken