Wie kann ich Daten als Formulardaten anstelle einer Anforderungsnutzlast posten?
In den folgenden code, den AngularJS $http
- Methode ruft die URL und sendet die xsrf-Objekt als "Anfrage-Payload" (wie beschrieben in der Chrome-debugger Registerkarte "Netzwerk"). Die jQuery - $.ajax
Methode hat den gleichen Ruf, aber legt xsrf als "Form Data".
Wie kann ich machen, AngularJS Einreichen xsrf-als form-Daten, anstatt ein Anfrage-payload?
var url = 'http://somewhere.com/';
var xsrf = {fkey: 'xsrf key'};
$http({
method: 'POST',
url: url,
data: xsrf
}).success(function () {});
$.ajax({
type: 'POST',
url: url,
data: xsrf,
dataType: 'json',
success: function() {}
});
InformationsquelleAutor der Frage mjibson | 2012-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die folgende Zeile muss Hinzugefügt werden, um den $http-Objekts übergeben wird:
Und die übergebenen Daten sollten umgewandelt werden in ein URL-kodierter string:
Also haben Sie so etwas wie:
Aus: https://groups.google.com/forum/#!msg/eckig/5nAedJ1LyO0/4Vj_72EZcDsJ
UPDATE
Nutzung der neuen Dienste Hinzugefügt, die mit AngularJS V1.4, siehe
InformationsquelleAutor der Antwort mjibson
Wenn Sie nicht möchten, verwenden Sie jQuery in die Lösung, die Sie könnten versuchen. Lösung geschnappt, von hier aus https://stackoverflow.com/a/1714899/1784301
InformationsquelleAutor der Antwort Anthony
Die anhaltende Verwirrung um dieses Thema inspiriert mich zu schreiben, einen blog-Beitrag darüber. Die Lösung, die ich vorschlagen, in diesem post ist besser als Ihr Derzeitiger top-bewerteten Lösung, denn es schränkt Sie nicht ein, um diese parametrisieren Sie Ihre Daten-Objekt für den $http-service-Aufrufe; also mit meiner Lösung können Sie einfach weiter, um pass eigentlichen Daten-Objekte zu $http.post(), etc. und noch das gewünschte Ergebnis erzielen.
Auch, die top-bewerteten Antwort stützt sich auf die Einbeziehung der vollständigen jQuery in die Seite für den $.param () - Funktion, in der Erwägung, dass meine Lösung ist jQuery Agnostiker, Reine AngularJS bereit.
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/
Hoffe, das hilft.
InformationsquelleAutor der Antwort Ezekiel Victor
Nahm ich ein paar der anderen Antworten und machte etwas, was ein bisschen sauberer, setzen diese
.config()
Anruf auf das Ende Ihrer eckigen.Modul in Ihrem app.js:InformationsquelleAutor der Antwort kzar
Als von AngularJS v1.4.0, es ist ein built-in
$httpParamSerializer
service, konvertiert ein beliebiges Objekt zu einem Teil eines HTTP-request nach den Regeln, die aufgeführt sind, auf die docs-Seite.Es kann z.B. so verwendet werden:
Denken Sie daran, dass für eine korrekte form zu posten, die
Content-Type
header muss geändert werden. Um dies zu tun, die Global für alle POST-requests, dieser code (aus Albireo ist eine halbe Antwort) können verwendet werden:Tun dies nur für den aktuellen Beitrag, der
headers
- Eigenschaft des request-Objekt muss geändert werden:InformationsquelleAutor der Antwort Mitja
Definieren Sie das Verhalten Global:
So dass Sie nicht haben, neu zu definieren, es jedes mal:
InformationsquelleAutor der Antwort Albireo
Als Problemumgehung können Sie einfach den code empfangen die POST reagiert auf application/json-Daten. Für PHP habe ich den code unten, so dass ich POST von ihm in irgendein form-encoded oder JSON.
InformationsquelleAutor der Antwort James Bell
Diese Antworten Aussehen wie wahnsinnig übertrieben, manchmal ist einfach einfach besser:
InformationsquelleAutor der Antwort Serj Sagan
Können Sie versuchen, mit unten Lösung
InformationsquelleAutor der Antwort tmquang6805
Erstellung eines adapter-service für post:
Verwenden Sie es in Ihrem Controller oder was auch immer:
InformationsquelleAutor der Antwort Ozgur
Es ist ein wirklich schönes tutorial, das geht über diese und andere damit zusammenhängende Sachen - Die Einreichung AJAX-Formulare: Die AngularJS Weg.
Im Grunde, müssen Sie die header der POST-Anforderung angeben, dass Sie das senden von Formular-Daten als URL-codierte Zeichenfolge, und legen Sie die zu sendenden Daten das gleiche format
Beachten Sie, dass jQuery param () - Hilfsfunktion wird hier für serialising die Daten in eine Zeichenfolge, aber Sie können dies manuell tun, wenn nicht mit jQuery.
InformationsquelleAutor der Antwort robinmitra
Bitte Auschecken!
https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs
InformationsquelleAutor der Antwort aul
Für Symfony2-Benutzer:
Wenn Sie nicht wollen, etwas zu ändern in Ihrem javascript für diese Arbeit, die Sie tun können, diese änderungen in Ihr symfony-app:
Erstellen Sie eine Klasse, die Sie erweitert Symfony\Component\HttpFoundation\Request Klasse:
Nun verwenden Sie die Klasse in app_dev.php (oder eine beliebige index-Datei, die Sie verwenden)
InformationsquelleAutor der Antwort carmel
Nur set Content-Type ist nicht genug, url encode Daten in das Formular vor dem senden.
$http.post(url, jQuery.param(data))
InformationsquelleAutor der Antwort Merlin Ran
Derzeit bin ich über folgende Lösung, die ich gefunden in der AngularJS google-Gruppe.
Beachten Sie, dass wenn Sie mit PHP, Sie brauchen so etwas wie Symfony 2-HTTP-Komponente ist
Request::createFromGlobals()
zu Lesen, dieses als $_POST wird nicht automatisch geladen.InformationsquelleAutor der Antwort Aditya M P
AngularJS es richtig zu machen, als Sie dabei die folgenden content-type des http-request-header:
Wenn Sie mit php wie ich, oder sogar mit Symfony2 können Sie ganz einfach erweitern Sie Ihre server-Kompatibilität für das json-standard, wie hier beschrieben: http://silex.sensiolabs.org/doc/cookbook/json_request_body.html
Dem Symfony2 Weise (z.B. auf der Innenseite Ihres DefaultController):
Der Vorteil wäre, dass Sie nicht brauchen, zu verwenden jQuery param und könnten Sie AngularJS seiner nativen Weg von solchen Anforderungen.
InformationsquelleAutor der Antwort Michael
Vollständige Antwort (seit angular 1.4). Sie müssen de Abhängigkeit $httpParamSerializer
InformationsquelleAutor der Antwort Sebastián Rojas
In Ihrem app-config -
Mit Ihrem Ressource-request -
InformationsquelleAutor der Antwort Vivek
Dies ist nicht eine direkte Antwort, sondern eher eine etwas andere design-Richtung:
Nicht per post die Daten als Formular, sondern als JSON-Objekt direkt zugeordnet werden, um server-side object, oder verwenden REST-Stil path-variable
Nun kenne ich weder die option könnte sein geeignet in Ihrem Fall, da Sie versuchen, übergeben Sie einen XSRF-Taste. Zuordnung in eine path-variable, die wie das ist eine schreckliche design:
Denn von Natur aus würden Sie wollen, um pass xsrf-Taste, um andere Pfad auch
/login
/book-appointment
etc. und Sie nicht zu verwirren wollen Ihre hübsche URLInteressanterweise hinzufügen, ein Objekt-Feld nicht angemessen ist, entweder, weil nun auf die einzelnen json-Objekt übergeben-server, den Sie hinzufügen müssen, um das Feld
Werden Sie sicherlich nicht wollen, fügen Sie ein weiteres Feld auf Ihrem server-side-Klasse, die keine direkte semantische Verbindung mit der Domäne-Objekt.
Meiner Meinung nach der beste Weg, um Ihren pass xsrf-Taste ist über einen HTTP-header. Viele xsrf-Schutz der server-Seite web-framework-Bibliothek zu unterstützen. Zum Beispiel in Java, Spring, können Sie es mit
X-CSRF-TOKEN
- header.Winkel-ausgezeichnete Bindungsfähigkeit JS-Objekt auf UI-Objekt heißt, wir können loszuwerden, die Praxis der Entsendung bilden alle zusammen und veröffentlichen Sie JSON statt. JSON kann leicht de-serialisiert in server-side object und die Unterstützung komplexer Datenstrukturen wie anzeigen, arrays, geschachtelten Objekten usw..
Wie Sie post-array in einer form, die Nutzlast? Vielleicht so:
oder so:
Beide sind arm-design..
InformationsquelleAutor der Antwort gerrytan
Dies ist, was ich Tue, für mein Bedürfnis, Wohin muss ich das senden der login-Daten-API Daten in das Formular und das Javascript-Objekt(userData) wird immer automatisch konvertiert URL-kodierte Daten
Diese, wie meine Userdata ist
InformationsquelleAutor der Antwort Shubham
Nur Dünn, Sie haben zu ändern, ist über die Eigenschaft "params" anstatt "Daten" beim erstellen der $http-Objekt:
Im obigen Beispiel-clients[i] ist einfach nur JSON-Objekt (nicht serialisiert in irgendeiner Weise). Wenn Sie "params" anstatt "Daten" eckige serialisieren Sie das Objekt, für das Sie mit $httpParamSerializer: https://docs.angularjs.org/api/ng/service/$httpParamSerializer
InformationsquelleAutor der Antwort Rafal Zajac
Verwenden AngularJS
$http
service und nutzen Sie Ihrepost
Methode oder konfigurieren$http
Funktion.InformationsquelleAutor der Antwort Shivang Gupta