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?

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


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.


@NikitaKuhta, sudahkah Anda menyetel writerkonfigurasi root? Mungkin diperlukan. encodetidak bekerja untuk saya imageshack.us/f/32/20120308153201.png
— Manusia Molekuler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.