2014-01-25 8 views
14

Die $ http.jsonp-Methode, die in der offiziellen Dokumentation beschrieben wird, scheint immer Anfragen auszuführen: http://docs.angularjs.org/api/ng. $ Http # methods_jsonp.Wie wird eine JSONP-POST-Anfrage in eckigen erstellt?

Ich habe versucht, die Konfigurationsoption ‚POST‘ Einstellung, aber es sendet noch ein GET:

$http.jsonp('/api/new?callback=JSON_CALLBACK', {method: 'POST'}); 

ich auch in der Hoffnung, versucht habe, ein Datum Argument Einstellung, die Winkel auf einen Post-Schalter würden:

$http.jsonp('/api/new?callback=JSON_CALLBACK', {data: {stuff: true}}); 

Aber es immer noch nicht :)

wie für einen Beitrag wie folgt machen:

$http.post('/api/new?callback=JSON_CALLBACK') 

Es macht offensichtlich eine POST machen, aber das Winkel Magie Dingen mit der JSON_CALLBACK und erzeugt den folgenden JS Fehler nicht tun:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.yyy.zzz' is therefore not allowed access. 

(Die API ist nicht auf dem gleichen Server wie die App, das ist der Punkt von JSONP).

Google war bei diesem Problem am wenigsten hilfreich und das Lesen der Quellen von angular ist nicht die einfachste Aufgabe. Also, wie kann ich eine JSONP POST Anfrage mit eckigen machen?

Antwort

29

Sie können nicht eine POST-Anforderung mit JSON-P (mit oder ohne Winkel)

Ein JSON-P Anforderung durch Erzeugen eines <script> Element mit einem src Attribut arbeitet machen. Dies löst immer eine GET-Anfrage aus.


Wenn Sie eine Cross-Domain-POST-Anfrage mit JavaScript machen, dann müssen Sie entweder XMLHttpRequest verwenden (und haben die Serverversorgung geeignet Zugriffssteuerheader als pro the CORS specification) oder Proxy die Anforderung durch den Server der Seite Hosting .

+2

Verdammt, natürlich! Danke, akzeptiere das, sobald ich darf. – djfm

+1

das ist nur die Hälfte der Geschichte, denke ich, .. IMO ist es möglich, mit POST und JSON-P zusammen. Aber wie Sie bereits bemerkt haben, funktioniert es möglicherweise nicht, wenn es über Cross-Domains geschieht. aber gleiche Domain ?! (irgendwie kantig scheint es nicht lokal zu unterstützen) –

+0

@OleK - Nein, das ist die ganze Geschichte. Sehen Sie noch einmal den allerersten Satz. Es ist unmöglich, eine POST-Anfrage mit JSONP zu stellen. Der zweite Absatz der Antwort erklärt, warum das so ist. – Quentin

Verwandte Themen