Cách truy xuất Tải trọng Yêu cầu


118

Tôi đang sử dụng PHP , ExtJSajax store .

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 Chrome Console, tôi thấy các 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 để lấy nó trong PHP?

Câu trả lời:


257

Nếu tôi hiểu tình huống một cách chính xác, bạn chỉ đang truyền dữ liệu json qua phần thân http, thay vì application/x-www-form-urlencodeddữ liệu.

Bạn có thể tìm nạp dữ liệu này bằng đoạn mã này:

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

Nếu bạn đang chuyển json, thì bạn có thể làm:

$data = json_decode($request_body);

$data thì chứa dữ liệu json là mảng php.

php://inputlà một cái gọi là trình bao bọc .

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


2
Tôi có thể lấy dữ liệu. Cảm ơn. !
nkuhta

7
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 mình thật điên rồ.
Zacho

tiêu đề là application / json
angelin Nadar

@AngelinNadar Sau đó, câu trả lời này được áp dụng.
Ikke

Nếu sử dụng Laravel, chỉ cần tạo một hàm trợ giúp 1. lấy chuỗi này và 2. json_decodes nó. Sau đó, nó sẽ không khác gì một mảng từ Input :: all (); Ở một khía cạnh nào đó, điều này có thể không phù hợp với những người khác.
Michael J. Calkins

12

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

... các giá trị sẽ được gửi như một phần của tham số yêu cầu thay vì một bài đăng thô (thông qua tài liệu để mã hóa cấu hình của Ext.data.writer.Json)

CẬP NHẬT

Các tài liệu cũng nói rằng:

Tùy chọn mã hóa chỉ nên được đặt thành true khi một gốc được xác định

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


@NikitaKuhta, bạn đã thiết lập writercấu hình gốc chưa? Nó có thể được yêu cầu. encodekhông làm việc cho tôi imageshack.us/f/32/20120308153201.png
Molecular Man
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.