2009-09-04 24 views
6

Có cách nào để kiểm tra xem yêu cầu đến có thuộc loại AJAX JSON không?PHP kiểm tra xem Yêu cầu đến có phải là loại JSON

tôi đã cố gắng

if(($_SERVER['REQUEST_METHOD']=='JSON')) 
{ 
} 

Nhưng nó đã không làm việc.

Mọi suy nghĩ?

+0

http://stackoverflow.com/questions/1322863/what-is-the-best-way-inside-a-controller-to-know-if-the-request-is-a-xmlhttp-on – bobince

+0

Lưu ý , mime là ứng dụng/json. – Dykam

Trả lời

11

Bạn chấp nhận yêu cầu từ đâu, chính xác, bạn sẽ không biết?

Bạn có thể có chức năng ở đầu tập lệnh cố gắng nhập dữ liệu dưới dạng JSON hoặc simplexml. Nếu nó gặp lỗi, bạn biết đó là lỗi khác ...

Suy nghĩ thứ hai, hãy thử nghiệm nó là JSON, simplexml sẽ ném một lỗi vì hàng tấn lý do.

$json_request = (json_decode($request) != NULL) ? true : false; 
2

Bạn có thể làm một kiểm tra về chấp nhận param, nếu nó là text/javascript json nói của bạn, nếu nó là text/xml đoán những gì: P

$ _SERVER [ 'HTTP_ACCEPT']

+0

Bạn giả định rằng chương trình JavaScript sẽ đặt đúng tiêu đề của XMLHttpRequest, không bao giờ được thực hiện (ai quan tâm?). Nói chung, kịch bản phía máy chủ được thực hiện để trả lời chỉ trong một định dạng và tôi không thể thấy bất kỳ lý do nào tại sao nó phải khác nhau. – Havenard

+0

Đây là quy trình chuẩn khi bạn yêu cầu một số trang hoặc dịch vụ (nhấn một URL), bạn nên chỉ định loại kết quả bạn mong đợi trong yêu cầu. Tôi đã làm việc trên nhiều dịch vụ web nơi người dùng mong đợi thông tin trong XML hoặc JSON để họ chỉ định rằng trong param yêu cầu. khôn ngoan khác họ phải cung cấp phần mở rộng của URL cho phép somesite.com/get_user[.xml | .json]. Nhiều người tự do như Jersey, vv trong Java, jQuery và vài thư viện curl tùy chỉnh php làm phụ thêm thông tin này trong tiêu đề của yêu cầu (cách giao tiếp chuẩn). nếu không vượt qua tham số bổ sung trong mỗi yêu cầu –

+1

Khi trình duyệt bắt chước việc giao dịch với bất kỳ dịch vụ nào của trang web (hoặc URL), chúng chỉ định 'text/html', jQuery đặt' application/json' trong tiêu đề yêu cầu nếu dataType được đặt thành json như ' dataType: 'json'' và biến trên là như sau 'application/json, text/javascript, */*; q = 0.01' URL đã mở của trình duyệt sẽ hiển thị 'văn bản/html, ứng dụng/xhtml + xml, ứng dụng/xml; q = 0,9, hình ảnh/webp, */*; q = 0,8' –

0

Hãy thử json_decode ()

3

Bạn có thể kiểm tra tiêu đề X-Requested-With, một số thư viện, như jQuery đặt thành "XMLHttpRequest".

$isAjaxRequest = $_SERVER['X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
+0

Trong liên kết của bạn, jQuery sử dụng ' X-Yêu cầu-Với 'không' X_REQUESTED_WITH '. Vì vậy, chúng ta sẽ không làm '$ is_ajax = ($ _SERVER ['X-Requested-With'] == 'XMLHttpRequest');' thay vào đó? – Justin

6

Bạn cần đặt tiêu đề từ phía máy khách. jQuery và các thư viện khác đặt tiêu đề x-requested-with:

if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
{ 
    echo "Ajax request"; 
} 
0

bạn luôn có thể đặt thêm tiêu đề xác định điều đó hoặc sử dụng biến tùy ý để biểu thị yêu cầu JSON.

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