PHP處理Ajax請求與Ajax跨域問題
這篇文章主要介紹了PHP處理Ajax請求與Ajax跨域問題的相關資料,非常不錯,具有參考借鑑價值,需要的朋友可以參考下,就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!
PHP判斷是否為Ajax請求
我們知道,在發送ajax請求的時候,可以通過XMLHttpRequest這個對象,創建自定義的header頭信息, 在jquery框架中,對於通過它的$, $, 或者$方法請求網頁內容時,它會向服務器傳遞一個HTTP_X_REQUESTED_WITH的參數,php中就是在header一層判斷是否是ajax請求,對應的根據$_SERVER['HTTP_X_REQUESTED_WITH']判斷。一般情況下$_SERVER['HTTP_X_REQUESTED_WITH']默認是XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定義創建的,使用equestHeader(name,value)。
示例:前端頁面發送普通的ajax請求給後端。
?
1
2
3
4
5
6
7
$({
type: "GET",
url: '',
success: function(data) {
(data);
}
});
服務端可以判斷該請求是不是Ajax異步請求,然後根據業務需求做出響應的迴應。
以下是服務端的簡單驗證是否為ajax請求的代碼:
?
1
2
3
4
5
6
7
8
function isAjax() {
return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false;
}
if (isAjax()) {
echo 'Ajax Request Success.';
} else {
echo 'No.';
}
Ajax發起JSONP跨域請求
我們通過jQuery的JSONP方式可以實現跨域ajax請求,服務端php也需要做出相應的處理,也就是説php這邊必須和前端頁面按照一定的格式請求和返回數據。
示例:前端頁面發起JSONP請求:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
$({
type: "get",
data: "random="+om(),
url: "",
dataType: "jsonp",
jsonp: "callback",
success: function(data) {
(data);
},
error: function() {
('Request Error.');
}
});
我們會發現,ajax請求參數中有 dataType: "jsonp" 和 jsonp: "callback" ,這個就表明了我要請求的是jsonp,並且會有回調callback返回。當然,我們也可以自定義回調函數,如 jsonpCallback:"success_jsonpCallback"
還可以簡單的寫成:
?
1
2
3
4
5
SON('?",{
random: om()
}, function(data){
(data);
});
php後端服務代碼可以這樣寫(注意輸出返回的.格式):
?
1
2
3
4
5
$data = array(
'rand' => $_GET['random'],
'msg' => 'Success'
);
echo $_GET['callback'].'('_encode($data).')';
Ajax跨域請求:CORS
CORS,又稱跨域資源共享,英文全稱Cross-Origin Resource Sharing。假設我們想使用Ajax從的頁面上向的頁面上要點數據,通常情況由於同源策略,這種請求是不允許的,瀏覽器也會返回“源不匹配”的錯誤,所以就有了“跨域”這個説法。但是我們也有解決辦法,我們可以再的頁面header信息中增加一行代碼:
?
1
header("Access-Control-Allow-Origin: *");
當我們設置的header為以上信息時,任意一個請求過來之後服務端我們都可以進行處理和響應,那麼在調試工具中可以看到其頭信息設置,其中見紅框中有一項信息是“*Access-Control-Allow-Origin:* ”,表示我們已經啟用CORS,如果要限制只允許某個域名的請求,可以這樣:
?
1
header("Access-Control-Allow-Origin: ");
示例:通過CORS跨域請求數據
?
1
2
3
4
5
6
7
8
9
10
11
12
13
$({
type: "get",
data: "random="+om(),
url: "",
dataType: "json",
success: function(data) {
(data);
$("#result_3")(+':'+);
},
error: function() {
$("#result_3")('Request Error.');
}
});
我們在另一個網站域名下的加上這樣的代碼:
?
1
2
3
4
5
6
header("Access-Control-Allow-Origin: ");
$data = array(
'rand' => $_GET['random'],
'msg' => 'Success'
);
echo json_encode($data);
這就實現了從頁面發起跨域異步請求到域名路徑,並得到響應。
以上所述是小編給大家介紹的PHP處理Ajax請求與Ajax跨域,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對腳本之家網站的支持!
-
php計算兩個文件相對路徑的方法
文章主要介紹了php計算兩個文件相對路徑的方法,涉及php操作字符串的`技巧,具有一定參考借鑑價值,需要的朋友可以參考下.一、問題:寫一個php函數算出兩個文件的相對路徑。例如$a="/a/b/c/d/";$b="/a/b/12/34/",B相對於A的相對路徑是什麼?二、解決方法:?123456789101...
-
ThinkPHP中自動驗證
學無止境,剛開始學習PHP會覺得簡單,但是越學會越難。下面是小編整理的關於ThinkPHP中自動驗證的知識,希望對大家有用,更多消息請關注應屆畢業生網。ThinkPHP中自動驗證:array(‘字段’,‘驗證規則’,‘錯誤提示’[,‘驗證條件&rsqu...
-
PHP如何使用curl發送GET和POST請求
導語:PHP如何使用curl發送GET和POST請求,具體詳情請閲讀下面代碼,更多詳情請關注應屆畢業生考試網。使用CURL發送請求的基本流程使用CURL的PHP擴展完成一個HTTP請求的發送一般有以下幾個步驟:1.初始化連接句柄;2.設置CURL選項;3.執行並獲取結果;4.釋放VURL連接句柄。...
-
php統計數組元素個數的方法
PHP是一種HTML內嵌式的語言,是一種在服務器端執行的嵌入HTML文檔的腳本語言,語言的.風格有類似於C語言,被廣泛地運用。下面是小編為大家搜索整理的php統計數組元素個數的方法,希望大家能有所收穫,更多精彩內容請及時關注我們應屆畢業生考試網!count():對數組中的元...