PHP判斷ajax請求的原理:
在發(fā)送ajax請求的時候溯泣,我們可以通過XMLHttpRequest這個對象策幼,創(chuàng)建自定義的header頭信息摊唇, 在jquery框架中,對于通過它的$.ajax, $.get, or $.post方法請求網(wǎng)頁內(nèi)容時狐胎,它會向服務(wù)器傳遞一個HTTP_X_REQUESTED_WITH的參數(shù)鸭栖,php中就是在header一層判斷是否是ajax請求,對應(yīng)的根據(jù)$_SERVER['HTTP_X_REQUESTED_WITH']判斷握巢。一般情況下$_SERVER['HTTP_X_REQUESTED_WITH']默認是XMLHttpRequest;$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定義創(chuàng)建的晕鹊,使用XMLHttpRequest.setRequestHeader(name,value);
//服務(wù)端
function is isAjax() {
if (SERVER('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') {
$isajax = !empty($_GET['_return']) ? $_GET['_return'] : 1;
$ajax_request = 1;
}
return $isajax;
}
//客戶端
$.ajax({
type : "GET",
url : base_url + 'php_check_ajax_request/get_user_list.html',
beforeSend : function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("request_type","ajax");
},
success : function(data){
$("#user_list").html(data);
$tip.hide();
$button.attr('disabled',true);
}
});
關(guān)于AJAX跨域請求json數(shù)據(jù)的實現(xiàn)方法
通過jQuery的JSONP
jQuery.getJSON方法:
jQuery.getJSON('http://search.twitter.com/search.json/.callback=?",{
q:"Arsenal"
}, function(tweets){
console.info('twitter retrund:', tweets);
});
也可以使用如下 代碼:
$.ajax({
type: "get",
data: "random="+Math.random(),
url:url,
dataType:"jsonp",
jsonp:"callback",
success: function(data){
$.each(data, function(key,val){
$("#myDiv").html($("#myDiv").html()+val.cvalue+"</br>");
)}
}
})
AJAX POST&跨域 解決方案 - CORS
CORS(跨域資源共享,Cross-Origin Resource Sharing)
假設(shè)我們頁面或者應(yīng)用已在 http://www.test1.com 上了暴浦,而我們打算從 http://www.test2.com 請求提取數(shù)據(jù)溅话。一般情況下,如果我們直接使用 AJAX 來請求將會失敗歌焦,瀏覽器也會返回“源不匹配”的錯誤飞几,"跨域"也就以此由來。
利用 CORS同规,http://www.test2.com 只需添加一個標(biāo)頭循狰,就可以允許來自 http://www.test1.com 的請求,下圖是我在PHP中的 hander() 設(shè)置券勺,“”號表示允許任何域向我們的服務(wù)端提交請求:
也可以設(shè)置指定的域名绪钥,如域名 http://www.test2.com ,那么就允許來自這個域名的請求*:
當(dāng)前我設(shè)置的header為“”关炼,任意一個請求過來之后服務(wù)端我們都可以進行處理&響應(yīng)程腹,那么在調(diào)試工具中可以看到其頭信息設(shè)置,其中見紅框中有一項信息是“Access-Control-Allow-Origin:** ”儒拂,表示我們已經(jīng)啟用CORS