Cara mengambil Minta Payload

118

Saya menggunakan PHP , ExtJS dan ajax store .

Ini mengirimkan data (saat membuat, memperbarui, menghancurkan) bukan dalam POST atau GET. Di Konsol Chrome, saya melihat parameter keluar saya sebagai JSON di bidang " Minta Muatan ". $ _POST dan $ _GET kosong.

Bagaimana cara mendapatkannya kembali di PHP?

nkuhta
sumber

Jawaban:

258

Jika saya memahami situasinya dengan benar, Anda hanya meneruskan data json melalui badan http, bukan application/x-www-form-urlencodeddata.

Anda dapat mengambil data ini dengan cuplikan ini:

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

Jika Anda melewati json, maka Anda dapat melakukan:

$data = json_decode($request_body);

$data kemudian berisi data json adalah php array.

php://inputadalah yang disebut pembungkus .

php: // input adalah aliran hanya-baca yang memungkinkan Anda membaca data mentah dari isi permintaan. Dalam kasus permintaan POST, lebih disukai menggunakan php: // input daripada $ HTTP_RAW_POST_DATA karena tidak bergantung pada arahan khusus php.ini. Selain itu, untuk kasus di mana $ HTTP_RAW_POST_DATA tidak diisi secara default, ini adalah alternatif yang berpotensi mengurangi penggunaan memori untuk mengaktifkan always_populate_raw_post_data. php: // input tidak tersedia dengan enctype = "multipart / form-data".

Ikke
sumber
2
Saya bisa mengambil data. Terima kasih. !
nkuhta
7
Terima kasih banyak! Saya telah mencari jawaban ini selama berhari-hari, dan mengira saya gila.
Zacho
headernya adalah application / json
Angelin Nadar
@AngelinNadar Maka jawaban ini berlaku.
Ikke
Jika menggunakan Laravel cukup buat fungsi pembantu yang 1. mengambil string ini dan 2. json_decode itu. Maka itu tidak akan berbeda dengan array dari Input :: all (); Di sisi lain, ini mungkin tidak akan berhasil untuk orang lain juga.
Michael J. Calkins
12

Anda juga dapat mengatur extJ writerdengan dan itu akan mengirim data secara teratur (dan, karenanya, Anda akan dapat mengambil data melalui dan ).encode: true$_POST$_GET

... nilai akan dikirim sebagai bagian dari parameter permintaan sebagai kebalikan dari posting mentah (melalui dokumen untuk konfigurasi encode dari Ext.data.writer.Json)

MEMPERBARUI

Juga dokumen mengatakan bahwa:

Opsi encode hanya boleh disetel ke true saat root ditentukan

Jadi, mungkin, writer's rootconfig diperlukan.

Manusia Molekuler
sumber
@NikitaKuhta, sudahkah Anda menyetel writerkonfigurasi root? Mungkin diperlukan. encodetidak bekerja untuk saya imageshack.us/f/32/20120308153201.png
Manusia Molekuler