วิธีดึงข้อมูลการร้องขอ


118

ฉันใช้PHP , ExtJSและร้านอาแจ็กซ์

ส่งข้อมูล (เมื่อสร้างอัปเดตทำลาย) ไม่อยู่ใน POST หรือ GET ในคอนโซล Chromeฉันเห็นพารามิเตอร์ขาออกเป็น JSON ในช่อง " ขอเพย์โหลด " $ _POST และ$ _GETว่างเปล่า

จะดึงข้อมูลใน PHP ได้อย่างไร?

คำตอบ:


258

ถ้าฉันเข้าใจสถานการณ์อย่างถูกต้องคุณแค่ส่งข้อมูล json ผ่าน http body แทนที่จะเป็นapplication/x-www-form-urlencodeddata

คุณสามารถดึงข้อมูลนี้ด้วยตัวอย่างนี้:

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

หากคุณกำลังผ่าน json คุณสามารถทำได้:

$data = json_decode($request_body);

$data จากนั้นมีข้อมูล json คืออาร์เรย์ php

php://inputเป็นที่เรียกว่าเสื้อคลุม

php: // input เป็นสตรีมแบบอ่านอย่างเดียวที่อนุญาตให้คุณอ่านข้อมูลดิบจากเนื้อหาคำขอ ในกรณีของคำขอ POST แนะนำให้ใช้ php: // input แทน $ HTTP_RAW_POST_DATA เนื่องจากไม่ได้ขึ้นอยู่กับคำสั่งพิเศษของ php.ini ยิ่งไปกว่านั้นสำหรับกรณีที่ไม่มีการเติมข้อมูล $ HTTP_RAW_POST_DATA ตามค่าเริ่มต้นอาจเป็นทางเลือกที่ใช้หน่วยความจำน้อยกว่าในการเปิดใช้งาน always_populate_raw_post_data php: // input ไม่สามารถใช้ได้กับ enctype = "multipart / form-data"


2
ฉันสามารถดึงข้อมูลได้ ขอบคุณ !
nkuhta

7
ขอบคุณมาก! ฉันค้นหาคำตอบนี้มาหลายวันแล้วและคิดว่าฉันบ้าไปแล้ว
Zacho

ส่วนหัวคือ application / json
Angelin Nadar

@AngelinNadar คำตอบนี้ใช้ได้
Ikke

หากใช้ Laravel เพียงแค่สร้างฟังก์ชันตัวช่วยที่ 1. ดึงสตริงนี้และ 2. json_decodes จากนั้นก็จะไม่ต่างจากอาร์เรย์จาก Input :: all (); ด้านข้างไม่ใช่สิ่งนี้อาจใช้ได้กับทุกคนเช่นกัน
Michael J.Calkins

12

นอกจากนี้คุณสามารถตั้งค่า extJs writerด้วยและจะส่งข้อมูลเป็นประจำ (และด้วยเหตุนี้คุณจะสามารถดึงข้อมูลผ่าน และ)encode: true$_POST$_GET

... ค่าจะถูกส่งเป็นส่วนหนึ่งของพารามิเตอร์การร้องขอซึ่งตรงข้ามกับโพสต์ดิบ (ผ่านเอกสารสำหรับการเข้ารหัส config ของ Ext.data.writer.Json)

UPDATE

เอกสารยังบอกด้วยว่า:

ควรตั้งค่าอ็อพชันการเข้ารหัสเป็น true เมื่อกำหนดรูทเท่านั้น

ดังนั้นอาจจะwriter's rootตั้งค่าเป็นสิ่งจำเป็น


@NikitaKuhta คุณได้กำหนดค่าwriterroot แล้วหรือยัง? อาจจำเป็นต้องใช้ encodeทำงานให้ฉันimageshack.us/f/32/20120308153201.png
Molecular Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.