2013-07-23 303 views
2

我在寫我自己的MVC框架來練習,我有一個請求類。我想要捕捉請求的類型並相應地解析數據,無論它是AJAX/JSON調用還是HTML/XML請求。檢測Ajax請求

進出口目前使用:

$_SERVER['HTTP_ACCEPT'] 

和上面所用的var_dump當它返回應用/ JSON此:

$.ajax({ 
    type: 'post', 
    url: 'index', 
    dataType: 'json', 
    data: { 
     _method: 'put' 
    } 
}); 

的var_dump($ _ SERVER [ 'HTTP_ACCEPT'])退貨:

string(46) "application/json, text/javascript, */*; q=0.01" 

問: 是這種方法可靠嗎?它總是工作嗎?檢測此類AJAX調用是否存在安全問題?

注意,在我的框架我所有的Ajax調用必須數據類型:「JSON」,除非它像HTMLXML不同的呼叫類型。

+0

你真的關心它是否是一個Ajax請求,或者只是熱點問題研究的要求退貨的格式是什麼? –

回答

9

使用jQuery,您可以使用$_SERVER['HTTP_X_REQUESTED_WITH']將被設置爲「XMLHttpRequest的。」這是使用jQuery時最可靠的方法。

+0

XMLHttpRequest意味着它是一個ajax調用?我如何檢測XML或JSON類型? – GGio

+0

@GGio根據您的需求,您可以嘗試分析'Accept'頭,但我個人會使用查詢參數或文件擴展名來表示所需的輸出格式。至少對於一個基本的用例。 –

+0

似乎有兩個問題:如何檢測請求是否來自ajax以及如何找出數據類型。這個答案回答了第一個問題。至於第二個問題,那麼可靠性被高估了!請參閱[這個問題](http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type?rq=1)關於JSON的真實MIME類型和[this one](http ://stackoverflow.com/questions/1049401/how-to-select-content-type-from-http-accept-header-in-php)處理類型檢測與Apache比PHP。 –

3

科林·莫雷利回答您的主要問題,但這應該幫助你跟蹤窗口。

XMLHttpRequest意味着它的ajax調用?如果 的XML或JSON爲 ,我該如何檢測其類型

是的。 XMLHttpRequest是發出請求的JavaScript對象。但現在它的命名很差,因爲你可以隨意發送任何你想要的東西。要回答第二個問題,您必須對收到的有效負載進行一些解析嘗試。您可以掃描XML,如果找不到,就假設它是JSON並嘗試解析。

+0

爲什麼我不能使用'$ _SERVER ['HTTP_ACCEPT']'似乎也檢測到XML以及它給出'application/xml' – GGio

+0

通常不是一個好主意,只是假設類似的東西設置正確。您應該始終手動測試傳入數據以確保它符合您的期望。此外,您可能會遇到某人向您發送無效XML的情況,您應該在執行過多的代碼之前儘早發現。 –