2009-09-04 47 views
6

有無論如何檢查傳入請求是否是AJAX JSON類型?PHP檢查傳入請求是否是JSON類型

我試圖

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

但沒有奏效。

有什麼想法?

+0

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

+0

注意,mime是application/json。 – Dykam 2009-09-04 09:30:48

回答

11

你是哪裏,就是這樣,你不知道接受請求?

您可以在腳本的開頭嘗試將數據導入爲JSON或simplexml。如果它發現一個錯誤,你知道它是另一個...

第二個想法,它測試它是JSON,simplexml將拋出一個錯誤,原因很多。

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

你可以在接受PARAM檢查,如果它的文本/ JavaScript的你說話的JSON,如果它的文本/ xml的猜測:P

$ _ SERVER [ 'HTTP_ACCEPT']

+0

假設JavaScript程序將正確設置XMLHttpRequest的標題,這是從來沒有做過的(誰在乎?)。一般來說,服務器端腳本只能以一種格式回答,而我看不出有什麼不同的原因。 – Havenard 2009-09-04 06:42:59

+0

當您請求某個頁面或服務(點擊URL)時,它是一個標準過程,您應該指定您在請求中預期的結果類型。我曾經在許多Web服務上工作,用戶期望XML或JSON中的信息,以便在請求參數中指定它。其他明智的是,他們必須提供URL的擴展名,比如說說 somesite.com/get_user[.xml |以.json。許多自由職業者,如澤西等在Java中,jQuery和幾個PHP自定義捲髮庫都附加在請求(標準的通信方式)標題中的這些信息。在每個請求中傳遞額外的參數 – 2015-01-27 17:56:22

+1

當瀏覽器使用任何站點的服務(或URL)進行通信時,他們會指定'text/html',如果dataType設置爲json,jQuery會在請求頭中設置'application/json', dataType:'json''及以上變量如下 'application/json,text/javascript,*/*; q = 0.01' 瀏覽器打開的URL將顯示 'text/html,application/xhtml + xml,application/xml; q = 0.9,image/webp,*/*; q = 0.8' – 2015-01-27 18:00:55

0

嘗試json_decode( )

3

您可以檢查X-Requested-With標題,某些庫,如jQuery將其設置爲"XMLHttpRequest"

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

在你的鏈接中, X請求 - 使用'不'X_REQUESTED_WITH'。所以我們不會'$ is_ajax =($ _SERVER ['X-Requested-With'] =='XMLHttpRequest');'而不是? – Justin 2013-05-07 20:02:03

6

您需要從客戶端設置標題。 jQuery和其他圖書館設置x-requested-with標題:

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

你總是可以設置一個額外的頭指定,或使用任意的變量來表示JSON請求。