2015-05-29 7 views
5

Ich habe ein seltsames Problem mit AngularJS und einem REST-Webservice. Dies ist mein Code:

$http.delete(appSettings['baseUrl'] + 'pricelistitem/' + article.itemNumber + '/' + article.acc) 
        .error(function(e) { 
         console.log(e); 
        }); 

Wenn dieser Aufruf, ich erhalte eine Fehlermeldung und die .error ausgeführt wird, aber das e Objekt ist null.

in der Konsole, erhalte ich diese Fehlermeldung:

XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access. 

Wenn in Postbote (das gleiche, das durch meinen Code aufgerufen wird), um die DELETE-Anforderung zu tun, ich bin diese Header in der reponse bekommen :

Access-Control-Allow-Methods → GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin → * 
Content-Length → 2 
Content-Type → application/json 
Date → Fri, 29 May 2015 06:26:00 GMT 
X-Powered-By → IBM i 

Ich würde sagen, diese Header sind korrekt und ich sollte diesen Fehler nicht erhalten. Selbst wenn ich das tat, ist das Fehlerobjekt null und zeigt mir so überhaupt keine Informationen.

UPDATE 15/06: Dieses Problem tritt auf, wenn Sie versuchen, PUT und DELETE zu verwenden. POST und GET funktioniert gut. Auf der Registerkarte Netzwerk der Chrome-Entwicklungstools kann ich nur eine OPTIONS-Anfrage sehen. In dieser Anfrage ist Access-Control-Allow-Methods nicht vorhanden (aber es ist in PUT/DELETE, wenn Sie dies in Postman testen), selbst nach der Konfiguration der Apache-Konfiguration, um diesen Header in jede Antwort aufzunehmen.

Ich habe stundenlang an diesem Problem ohne Ergebnis gearbeitet.

Was könnte dieses Problem verursachen? Muss die OPTIONS-Anfrage auch den Header Access-Control-Allow-Origin zurückgeben?

Jeder Rat würde sehr geschätzt werden!

+0

Nur von Skripten initiierte Anfragen sind von CORS betroffen. Daher ist das Testen einer DELETE-Anfrage in Postman völlig nutzlos, wenn Sie ein Problem mit CORS haben. Sie müssten die Preflight-Anfrage simulieren. Nehmen Sie die Fehlermeldung ernst und fragen Sie sich, warum der Server keinen Header "Access-Control-Allow-Origin" senden würde. – zeroflagL

+0

Nun, ich habe ehrlich gesagt keine Ahnung. Der Server gibt diese Kopfzeile zurück, unabhängig davon, ob ein Fehler auftritt oder nicht. – Bv202

+1

Das erste mögliche Problem ist, dass der Server diese Kopfzeile bei 'OPTIONS' Anfragen nicht hinzufügt. Ein anderer Grund könnte sein, dass der Header bei Anfragen von 'localhost' nicht hinzugefügt wird oder nur bei Anfragen von bestimmten Hosts hinzugefügt wird.Versuchen Sie, eine 'OPTIONS' Anfrage mit Postman mit dem Header 'Origin: http: // localhost: 5000' zu senden. – zeroflagL

Antwort

2

No 'Access-Control-Allow-Origin' header is present on the requested resource

Sie stehen vor Cross Domain Problem und was sollten Sie tun ist, ermöglicht CORS von Ihrem Server-Seite.

+1

ich denke, Kors ist aktiviert, wie wir in den Kopfzeilen Ausgabe sehen können – paka

+0

Dies wurde durch Hinzufügen von Access-Control-Allow-Origin: * aktiviert. Diese Header machen den Trick (obwohl ich weiß, dass dies nicht in der Produktion empfohlen wird) mit anderen Teilen der WS, aber nicht mit dieser aus irgendeinem Grund .. – Bv202

+0

wie Sie Header auf Ihrer Serverseite hinzufügen? – Rebornix

0

What is cros issue and how to solve it

Von Client-Seite Sie diesen Wert einige Zeit eingestellt haben oder Chrome cross plugin zum Testen versuchen zu überprüfen, ob es Cross-Domain-Fehler oder ein anderes Problem

oder versuchen, diese $ httpProvider

ist und siehe diesen Link Enabling CORS in Angular JS

$httpProvider.defaults.headers.get = { 'Access-Control-Allow-Origin': '*' }; 
$httpProvider.defaults.headers.get = { 'Access-Control-Request-Headers': 'X-Requested-With, accept, content-type' }; 
$httpProvider.defaults.headers.get = { 'Access-Control-Allow-Methods': 'GET, POST' }; 
$httpProvider.defaults.headers.get = { 'dataType': 'jsonp' }; 

+0

Wo sollte ich diesen Code hinzufügen und warum brauche ich ihn? Ja, wenn Sie ein Plugin verwenden, um CORS-Fehler zu vermeiden, funktioniert es einwandfrei. – Bv202

+0

siehe diesen Link http://www.d-mueller.de/blog/cross-domain-ajax-guide/ AND ajax cros issue http://stackoverflow.com/questions/16008324/cross-domain-ajax-request- Problem –

+0

@ Bv202 zuerst versuchen, Chrome-App wird es Ihre Zweifel, es ist cros Problem oder ein anderes Problem, wenn es funktioniert, dann müssen Sie diese über Wert, der in der Antwort erwähnt wird –

Verwandte Themen