So rufen Sie Request Payload ab


118

Ich benutze PHP , ExtJS und Ajax Store .

Es sendet Daten (beim Erstellen, Aktualisieren, Zerstören) nicht in POST oder GET. In der Chrome-Konsole werden meine ausgehenden Parameter als JSON im Feld " Payload anfordern " angezeigt . $ _POST und $ _GET sind leer.

Wie kann ich es in PHP abrufen?

Antworten:


255

Wenn ich die Situation richtig verstehe, leiten Sie anstelle von application/x-www-form-urlencodedDaten nur JSON-Daten über den http-Text weiter .

Sie können diese Daten mit diesem Snippet abrufen:

$request_body = file_get_contents('php://input');

Wenn Sie an json vorbeikommen, können Sie Folgendes tun:

$data = json_decode($request_body);

$data dann enthält die json Daten ist PHP-Array.

php://inputist ein sogenannter Wrapper .

php: // input ist ein schreibgeschützter Stream, mit dem Sie Rohdaten aus dem Anforderungshauptteil lesen können. Bei POST-Anforderungen ist es vorzuziehen, anstelle von $ HTTP_RAW_POST_DATA die Eingabe php: // zu verwenden, da dies nicht von speziellen php.ini-Anweisungen abhängt. In den Fällen, in denen $ HTTP_RAW_POST_DATA nicht standardmäßig ausgefüllt ist, ist dies eine potenziell weniger speicherintensive Alternative zur Aktivierung von always_populate_raw_post_data. php: // Eingabe ist nicht verfügbar mit enctype = "multipart / form-data".


2
Ich konnte Daten abrufen. Vielen Dank. !
— Nkuhta

7
Ich danke dir sehr! Ich habe tagelang nach dieser Antwort gesucht und dachte, ich wäre verrückt.
— Zacho

Der Header ist application / json
— Angelin Nadar

@AngelinNadar Dann gilt diese Antwort.
— Ikke

Wenn Sie Laravel verwenden, erstellen Sie einfach eine Hilfsfunktion, die 1. diese Zeichenfolge abruft und 2. json_decodes. Dann unterscheidet es sich nicht von einem Array von Input :: all (); Auf der einen Seite würde dies wahrscheinlich nicht für alle anderen funktionieren.
— Michael J. Calkins

12

Sie können auch extJs writermit einrichten und es werden regelmäßig Daten gesendet (und daher können Sie Daten über und abrufen ).encode: true$_POST$_GET

... die Werte werden als Teil der Anforderungsparameter im Gegensatz zu einem Rohbeitrag gesendet (über Dokumente zur Codierungskonfiguration von Ext.data.writer.Json)

AKTUALISIEREN

Auch Dokumente sagen, dass:

Die Codierungsoption sollte nur auf true gesetzt werden, wenn ein Root definiert ist

Daher ist wahrscheinlich writerdie rootKonfiguration erforderlich.


@NikitaKuhta, hast du die writerRoot-Konfiguration festgelegt? Es kann erforderlich sein. encodefunktioniert für mich imageshack.us/f/32/20120308153201.png
— Molecular Man
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.