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?

nkuhta
quelle

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".

Ikke
quelle
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.

Molecular Man
quelle
@NikitaKuhta, hast du die writerRoot-Konfiguration festgelegt? Es kann erforderlich sein. encodefunktioniert für mich imageshack.us/f/32/20120308153201.png
Molecular Man