AngularJs $ http.post () sendet keine Daten
Könnte mir jemand sagen, warum die folgende Aussage nicht senden der post-Daten an die bestimmte url? Die url wird aufgerufen, aber auf dem server, wenn ich print $_POST - bekomme ich ein leeres array. Wenn ich die print-Meldung in der Konsole, bevor Sie es auf die Daten - es zeigt den richtigen Inhalt.
$http.post('request-url', { 'message' : message });
Ich habe auch versucht es mit den Daten als string (mit demselben Ergebnis):
$http.post('request-url', "message=" + message);
Scheint es zu funktionieren, wenn ich es im folgenden format:
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
aber gibt es einen Weg, es zu tun mit dem $http.post() - und muss ich immer den Kopf, um für ihn zu arbeiten? Ich glaube, dass Sie die oben genannten Inhalte geben wird die Angabe format der gesendeten Daten, aber kann ich auch senden Sie es als javascript-Objekt?
InformationsquelleAutor der Frage Spencer Mark | 2013-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem mit asp.net MVC und hier die Lösung gefunden
Funktioniert wie ein Charme.
CODE
InformationsquelleAutor der Antwort Felipe Miosso
Es ist nicht super klar oben, aber wenn Sie erhalten die Anfrage in PHP, die Sie verwenden können:
$params = json_decode(file_get_contents('php://input'),true);
Zugriff auf ein array in PHP aus einer AngularJS POST.
InformationsquelleAutor der Antwort Don F
Können Sie die standardmäßige "Content-Type" wie folgt:
Über die
data
format:Versuchen, mit dieser Variante
InformationsquelleAutor der Antwort Denison Luz
Ich hatte ein ähnliches Problem, und ich Frage mich, ob dies kann nützlich sein, als gut: https://stackoverflow.com/a/11443066
Grüße,
InformationsquelleAutor der Antwort ericson.cepeda
Benutze ich gerne eine Funktion zum konvertieren von Objekten in post-params.
InformationsquelleAutor der Antwort Rômulo Collopy
Diese wurde schließlich angesprochen, der in eckigen 1.4 $httpParamSerializerJQLike
Sehen https://github.com/angular/angular.js/issues/6039
InformationsquelleAutor der Antwort Stetzon
Benutze ich jQuery param mit AngularJS post requrest. Hier ist ein Beispiel ... erstellen AngularJS-Anwendung-Modul, wo
myapp
definiert ist, mitng-app
in Ihren HTML-code.Nun lassen Sie uns einen Login-controller und POST-E-Mail und Passwort.
Mag ich nicht exaplain der code, es ist einfach genug zu verstehen 🙂 Beachten Sie, dass
param
ist von jQuery, so dass Sie installieren müssen sowohl jQuery und AngularJS damit es funktioniert. Hier ist ein screenshot.Hoffe, das ist hilfreich. Danke!
InformationsquelleAutor der Antwort Madan Sapkota
Im Gegensatz zu JQuery und aus Gründen der Pedanterie, Winkel verwendet JSON-format für POST
Daten transfer von einem client auf den server (JQuery gilt x-www-form-urlencoded vermutlich, obwohl JQuery und Angular verwendet JSON für Daten imput). Also es gibt zwei Teile des Problems: in js-client-Teil und in der server-Teil. So müssen Sie:
setzen Angular js client-Teil wie dieses:
UND
schreiben Sie in Ihrem server-Teil zum empfangen von Daten von einem client (wenn es php ist).
Hinweis: $_POST funktioniert nicht!
Die Lösung funktioniert für mich in Ordnung, hoffentlich, und für Sie.
InformationsquelleAutor der Antwort Roman
Ich hatte das gleiche problem mit AngularJS und Node.js + Express 4 + Router
Router erwartet die Daten aus der post-Anforderung in den Körper. Dieser Körper war immer leer, wenn ich folgte dem Beispiel von Winkel-Docs
Notation 1
Aber wenn ich es in den Daten
Notation 2
Edit 1:
Sonst node.js router erwarten, dass die Daten in erf.Körper, wenn verwendet notation 1:
Die auch sendet die Informationen als JSON-payload. Dies ist besser, in einigen Fällen, wo man ein array im json-und x-www-form-urlencoded geben wird, einige Probleme.
funktionierte es. Hoffe, es hilft.
InformationsquelleAutor der Antwort alknows
Senden von Daten per Post methode mit
$http
von angularjs, die Sie ändern müssendata: "message=" + message
mitdata: $.param({message:message})
InformationsquelleAutor der Antwort BERGUIGA Mohamed Amine
Bauen auf @felipe-miosso Antwort:
Fügen Sie es zu Ihrer Anwendung:
InformationsquelleAutor der Antwort Renaud
Habe ich nicht den Ruf, zu kommentieren, aber in der Antwort/Ergänzung zu Don F ' s Antwort:
$params = json_decode(file_get_contents('php://input'));
Einen zweiten parameter des
true
muss Hinzugefügt werden, um diejson_decode
- Funktion, um richtig zu return ein assoziatives array:$params = json_decode(file_get_contents('php://input'), true);
InformationsquelleAutor der Antwort Esten
Winkel
WebAPI 2
InformationsquelleAutor der Antwort Malcolm Swaine
Dieser code löste das Problem für mich. Es ist ein application-level-Lösung:
InformationsquelleAutor der Antwort Spartak Lalaj
Fügen Sie diese in Ihre js-Datei:
und fügen Sie diese zu Ihrem server die Datei:
Funktionieren sollte.
InformationsquelleAutor der Antwort Jesus Erwin Suarez
Ich auch vor ähnlichen problem, und ich war etwas wie das zu tun und das hat nicht geklappt. Meine Frühlings-controller war nicht in der Lage, Daten Lesen parameter.
Aber das Lesen in diesem forum und API-Doc, ich habe versucht, nach Möglichkeit und, die für mich gearbeitet.
Wenn jemand auch ähnliche Probleme haben, können Sie versuchen, unten Weg.
Bitte überprüfen Sie https://docs.angularjs.org/api/ng/service/$http#Beitrag für das, was param config tut.
{data:'"id":"1"'} – Map von strings oder Objekte, die gedreht werden, um URL?data="id:1"
InformationsquelleAutor der Antwort Viraj
dies ist wahrscheinlich eine späte Antwort, aber ich denke, der richtige Weg ist, um das gleiche Stück code, Winkel verwenden, wenn dabei ein "get" - Anforderung verwenden Sie
$httpParamSerializer
haben, um es zu injizieren, um Ihre controllerso können Sie einfach Folgendes tun ohne Jquery an alle ,
$http.post(url,$httpParamSerializer({param:val}))
InformationsquelleAutor der Antwort oneLeggedChicken
In meinem Fall habe ich das problem lösen, wie dieses :
Müssen Sie JSON verwenden.stringify für jede param enthält ein JSON-Objekt, und erstellen Sie dann Ihre Daten-Objekt mit "$.param" 🙂
NB : Meine "objJSON" ist ein JSON-Objekt, array, integer -, string-und html-Inhalte. Seine Gesamtgröße ist >3500 Zeichen.
InformationsquelleAutor der Antwort bArraxas
Den ich kenne, hat akzeptiert Antwort. Aber Folgendes könnte helfen, die zukünftigen Leser, wenn die Antwort nicht zu Ihnen passen aus irgendeinem Grund.
Winkel nicht ajax gleiche wie jQuery. Während ich versuchte, befolgen Sie die Anleitung zum ändern der Winkel -
$httpprovider
begegnete ich andere Probleme. E. g. Ich verwende codeigniter in die$this->input->is_ajax_request()
Funktion immer gescheitert (die geschrieben wurde von einem anderen Programmierer und weltweit verwendet, also nicht ändern) und Sie sagen: dies war nicht real, ajax-request.Um es zu lösen, nahm ich Hilfe von latente Versprechen. Getestet habe ich es in Firefox und ie9 und es funktionierte.
Habe ich folgende Funktion definiert außerhalb jeder der Winkel-code. Diese Funktion macht regelmäßig jquery-ajax-Aufruf und gibt der latenten/das Versprechen (ich Lerne noch) - Objekt.
Dann nenne ich es die angular-code mit den folgenden code. Bitte beachten Sie, dass wir aktualisieren die
$scope
manuell mit$scope.$apply()
.Dies ist vielleicht nicht die perfekte Antwort, aber es mir erlaubt, die jquery-ajax-Aufrufe mit Winkel-und mir erlaubt, zu aktualisieren
$scope
.InformationsquelleAutor der Antwort Nis
Ich hatte das gleiche problem im express .. zu beheben, müssen Sie bodyparser zum Parsen der json-Objekte vor dem senden von http-Anfragen.
InformationsquelleAutor der Antwort msoliman
Hoffe, es hilft.
InformationsquelleAutor der Antwort Mehdi Rostami
Nicht finden, ein komplettes code-snippet, wie $http.post-Methode Daten an den server senden, und warum es nicht funktioniert in diesem Fall.
Erläuterungen des folgenden code-snippet...
Einstellung für den Content-Type in der config-variable, die übergeben werden zusammen mit der Anfrage von angularJS $http.post anweisen, den server, senden wir Daten in www-post-format.
Beachten Sie die $htttp.post-Methode, wenn ich in senden den 1. parameter als url, 2. parameter Daten (serialisiert) und 3. parameter config.
Restliche code ist, versteht sich von selbst.
Blick auf die code-Beispiel von $http.post-Methode hier.
InformationsquelleAutor der Antwort Sheo Narayan
Wenn mit Gewinkelt >= 1.4hier ist die sauberste Lösung mit der serializer zur Verfügung gestellt von Winkel:
Dann können Sie einfach tun dies überall in Ihrem app:
Und es wird richtig serialisieren Sie die Daten als
param1=value1¶m2=value2
und senden Sie es an/requesturl
mit derapplication/x-www-form-urlencoded; charset=utf-8
Content-Type-header, so wie es normalerweise zu erwarten mit POST-Anfragen an den Endpunkten.TL;DR
Während meiner Forschung fand ich, dass die Antwort auf dieses problem kommt in vielen verschiedenen Geschmacksrichtungen; einige sind sehr verworren und hängt von benutzerdefinierten Funktionen, manche davon abhängen, jQuery und manche sind unvollständig, in der Annahme, dass Sie brauchen nur den header.
Wenn Sie nur die
Content-Type
header, der end-Punkt finden Sie die POST-Daten, aber es wird nicht in das standard-format, es sei denn, weil Sie bieten einen string als Ihredata
oder manuell Daten serialisiert Objekt, es wird serialisiert als JSON standardmäßig und möglicherweise falsch interpretiert, die auf dem Endpunkt.z.B. wenn die richtigen serializer nicht gesetzt wurde in dem oben genannten Beispiel, es würde gesehen werden, die im Endpunkt als:
Und kann dazu führen, dass unerwartete analysieren, z.B. ASP.NET behandelt es als eine
null
parameter name, mit{"param1":"value1","param2":"value2"}
als Wert; oder Fiddler interpretiert es anders, mit{"param1":"value1","param2":"value2"}
wie die parameter Namen undnull
als Wert.InformationsquelleAutor der Antwort Saeb Amini
Ähnlich wie die OP ' s vorgeschlagen, Arbeits-format & Denison Antwort, außer mit
$http.post
statt nur$http
und ist immer noch abhängig von jQuery.Die gute Sache über die Verwendung von jQuery ist hier, dass komplexe Objekte übergeben bekommen richtig; gegen die manuelle Umwandlung in die URL-Parameter, die möglicherweise entstellen die Daten.
InformationsquelleAutor der Antwort Benjamin Intal
Als ich dieses problem hatte der parameter I wurde die Buchung stellte sich heraus, dass ein array von Objekten, anstatt von einem einfachen Objekt.
InformationsquelleAutor der Antwort D. Kermott
Gerade aktualisiert von angular 1.2, 1.3, gefunden haben ein problem im code. Die Umwandlung einer Ressource führt zu einer endlos-Schleife, weil (ich glaube) $Versprechen halten wieder das gleiche Objekt. Vielleicht hilft es jemand...
Konnte ich beheben durch:
InformationsquelleAutor der Antwort tom_w
Habe ich mit der Antwort akzeptiert code (Felipe ' s code) für eine Weile und es funktioniert bestens (danke, Felipe!).
Jedoch, vor kurzem habe ich entdeckt, dass es Probleme mit leeren Objekte oder arrays.
Zum Beispiel bei der Einreichung dieses Objekt:
PHP scheint nicht zu sehen, B und C an alle. Es wird dies:
Einen Blick auf die aktuelle Anforderung in Chrome zeigt dies:
Schrieb ich eine alternative code-snippet. Es scheint zu funktionieren gut mit meinem use-cases, aber ich habe nicht ihn ausführlich getestet, also mit Vorsicht verwenden.
Ich verwendet, Typoskript, weil ich wie starke Typisierung, aber es wäre einfach zu konvertieren, um Reine JS:
Es ist weniger effizient als Felipe ' s code, aber ich glaube nicht, dass es darauf ankommt viel, da sollte es sofort im Vergleich zu den Gesamt-overhead der HTTP-request selbst.
Nun PHP zeigt:
Soweit ich weiß, es ist nicht möglich, PHP zu erkennen, dass B. a und C sind leere arrays, aber zumindest die Tasten erscheinen, das ist wichtig, wenn es code, die sich auf die eine gewisse Struktur, auch wenn sich der im wesentlichen leer im inneren.
Beachten Sie auch, dass es konvertiert undefineds und nulls auf leere strings.
InformationsquelleAutor der Antwort obe
Wenn Ihr mit PHP ist dies eine einfache Möglichkeit für den Zugriff auf ein array in PHP aus einer AngularJS POST.
InformationsquelleAutor der Antwort Luis Felipe Barnett V
Ich dies Problem gelöst, indem unterhalb codes:
Client-Seite (Js):
beachten Sie, dass die Daten eines Objekts.
Auf dem server (ASP.NET MVC):
und 'AllowCrossSiteJsonAttribute' ist für cross-domain-requests:
Hoffe, das war nützlich.
InformationsquelleAutor der Antwort pixparker
Ist es nicht eckig ist Schuld. Winkel ist speziell für die Arbeit im JSON-Welt. Also, wenn $http-service senden, AJAX request, senden Sie alle Ihre Daten als Nutzlast, nicht als form-Daten, so dass Sie Ihre back-End-Anwendung damit umgehen kann. Aber jQuery macht einige Dinge intern. Weisen Sie den jQuery - $ajax-Modul zu binden, Formular-Daten als JSON, aber vor dem senden von AJAX-request, JSON serialisiert und fügen Sie
application/x-www-form-urlencoded
header. Auf diese Weise werden Ihre back-End-Anwendung in der Lage, die empfangenen Formular-Daten in form von post-Parameter und nicht als JSON.Aber Sie können ändern, eckig $http-service ist Standard-Verhalten von
$httpParamSerializerJQLike eckig eingebauten service, der json serialisiert in der gleichen Weise $.param von jQuery.
Wenn Sie ein plugin zu serialisieren, Formular-Daten in das JSON zuerst, dann verwenden Sie dieses https://github.com/marioizquierdo/jquery.serializeJSON
InformationsquelleAutor der Antwort Uday Hiwarale