2012-03-07 34 views
90

Tôi đang sử dụng PHP, ExtJS cửa hàngajax.Làm thế nào để lấy Request Payload

Nó gửi dữ liệu (khi tạo, cập nhật, hủy) không phải trong POST hoặc GET. Trong Bàn điều khiển Chrome Tôi thấy thông số gửi đi của mình dưới dạng JSON trong trường "Yêu cầu tải trọng". $ _POST$ _GET trống.

Làm thế nào để truy xuất nó trong PHP?

Trả lời

194

Nếu tôi hiểu tình huống chính xác, bạn chỉ chuyển dữ liệu json qua cơ thể http, thay vì dữ liệu application/x-www-form-urlencoded.

Bạn có thể lấy dữ liệu này với đoạn này:

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

Nếu bạn đang đi qua json, sau đó bạn có thể làm:

$data = json_decode($request_body); 

$data sau đó chứa các dữ liệu json là mảng php.

php://input được gọi là wrapper.

php: // đầu vào là luồng chỉ đọc cho phép bạn đọc dữ liệu thô từ phần yêu cầu. Trong trường hợp yêu cầu POST, nó thích hợp hơn là để sử dụng đầu vào php: // thay vì $ HTTP_RAW_POST_DATA vì nó không phụ thuộc vào chỉ thị php.ini đặc biệt. Hơn nữa, đối với những trường hợp trong đó $ HTTP_RAW_POST_DATA không được điền theo mặc định, đó là khả năng thay thế thiếu bộ nhớ ít hơn để kích hoạt always_populate_raw_post_data. php: // đầu vào không có sẵn với enctype = "multipart/form-data".

+1

Tôi có thể truy xuất dữ liệu. Cảm ơn. ! –

+5

Cảm ơn bạn rất nhiều!Tôi đã tìm kiếm câu trả lời này trong nhiều ngày, và nghĩ rằng tôi bị điên. – Zacho

+0

tiêu đề là ứng dụng/json –

9

Ngoài ra bạn có thể thiết lập ExtJS writer với encode: true và nó sẽ gửi dữ liệu thường xuyên (và, do đó, bạn sẽ có thể lấy dữ liệu qua $_POST$_GET).

... những giá trị này sẽ được gửi dưới dạng một phần của các thông số yêu cầu như trái ngược với một bài thô (qua docs cho mã hóa cấu hình của Ext.data.writer.Json)

CẬP NHẬT

Cũng docs nói rằng:

Các tùy chọn mã hóa chỉ nên được thiết lập là true khi một gốc được định nghĩa

Vì vậy, có lẽ, cấu hình 's root là bắt buộc.

+0

mã hóa: đúng - không có gì thay đổi. Cùng một phương thức gửi. –

+0

@NikitaKuhta, bạn đã đặt cấu hình gốc của 'writer' chưa? Nó có thể được yêu cầu. 'encode' làm việc cho tôi http://imageshack.us/f/32/20120308153201.png/ –

Các vấn đề liên quan