在jquery中的ajax請求方法有很多,可是$.ajax, $.get, or $.post,并且他可以是json,html,txt等格式,這樣我們需要在php根據ajax發送過來的HTTP_X_REQUESTED_WITH是否為ajax請求,然后再根據$_SERVER[/'HTTP_ACCEPT/']檢判斷是那格式的請求.
php中就是在header一層判斷是否是ajax請求,對應的根據$_SERVER['HTTP_X_REQUESTED_WITH']判斷,代碼如下:
- /**
- * 當前請求是否ajax請求
- *
- * @access public
- * @return bool
- */
- function isAjax()
- {
- return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'XMLHttpRequest';
- }
一般情況下$_SERVER['HTTP_X_REQUESTED_WITH']默認是XMLHttpRequest.
ajax跨域只能指定jsonp格式的數據,這個是就不是XMLHttpRequest對象了,就算你自定義一個$_SERVER['HTTP_X_REQUESTED_WITH']也是沒有意義的.
解決的辦法:
針對跨域情況的getjson 或者ajax(jsonp)可以使用ACCEPT請求頭部格式來判斷
PHP端對應$_SERVER['HTTP_ACCEPT']
jsonp的請求一般是:text/javascript, application/javascript, */*
json的請求:application/json, text/javascript, */*
一個簡單的判斷跨域條件下的ajax請求,代碼如下:
- switch ($_SERVER['HTTP_ACCEPT']){
- case 'application/json, text/javascript, */*':
- // JSON 格式
- break;
- case 'text/javascript, application/javascript, */*':
- // javascript 或 JSONP 格式
- break;
- case 'text/html, */*':
- // HTML 格式
- break;
- case 'application/xml, text/xml, */*':
- // XML 格式
- break;
- }
新聞熱點
疑難解答