Ajax之get方式請求
阿新 • • 發佈:2019-01-06
ajax之get請求需要注意的兩個地方:
- 在url後邊以請求字串(傳遞的get引數資訊)形式傳遞資料。
- 對中文、=、&等特殊符號處理
對特殊資訊的處理:
在瀏覽器裡通過get引數傳遞一些特殊符號資訊會被誤解混淆,例如&、=等;
為了避免特殊符號被誤解產生歧義,需要對其進行編碼處理。
同時如果傳遞get引數中文資訊,也需要進行編碼處理。
- 在php裡邊可以通過函式urlencode()/urldecode()對特殊符號進行編碼,反編碼處理。
- 在javascript裡邊可以通過encodeURIComponent()對特殊符號等資訊進行編碼。
(以上藍色函式可以把“特殊符號、中文”轉變為瀏覽器可以識別的資訊,編碼後的資訊為%號後接兩個十六進位制數)
編碼後的資訊可以被正常接收使用,無需反編碼。
具體可以被編碼的特殊符號:
encodeURIComponent編碼
- 字元 特殊字元的含義URL編碼
# 用來標誌特定的文件位置 %23
% 對特殊字元進行編碼 %25
% 分隔不同的變數值對 %26
+ 在變數值中表示空格 %2B
\ 表示目錄路徑 %2F
= 用來連線鍵和值 %3D
? 表示查詢字串的開始 %3F
- 漢字的每個位元組單位轉為%後接兩個十六進位制數
ajax發起get請求
伺服器端02.php:
<?php
//接收get方式傳遞過來的“使用者名稱”資訊,並做資料庫校驗
print_r($_GET);
客戶端02get.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ajax-get請求</title> <script type="text/javascript"> function checkname(){ //ajax方式使用者名稱校驗 //第一步:獲取使用者名稱資訊 var nm = document.getElementById('username').value; //對傳遞的特殊符號(例如&、=等)進行編碼處理 //同時對中文也進行編碼處理 nm = encodeURIComponent(nm); //第二步:ajax校驗 var xhr = new XMLHttpRequest(); //ajax事件設定,以便接收返回的資訊 xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ alert(xhr.responseText); } } xhr.open('get', './02.php?name='+nm+'&addr=beijing');//加入了get引數資訊 xhr.send(null); } </script> </head> <body> <h2>ajax之使用者名稱的校驗(get方式)</h2> <p>使用者名稱:<input type="text" id="username" onblur="checkname()"></p> <p>手機號碼:<input type="text" id="usertel"></p> </body> </html>
未經編碼處理時特殊符號&會被當做單獨的引數處理:
對特殊符號編碼處理後,只識別兩個引數:
特殊符號被編碼後的效果,encodeURIComponent編碼後的中文(一個漢字是3個百分號)和特殊符號是%號後接兩位十六進位制數:
另,chrome、firefox等主流瀏覽器會對中文自動進行編碼處理,IE則不會:
php中特殊符號編碼處理:
比如另建一個伺服器端02php-encode.php檔案,超連結到02.php檔案:
<?php
$subject = "php&detail=html";
echo "<a href='./02.php?sjt=$subject'>php0713</a>";
未經編碼處理,特殊符號&會被當做單獨引數傳遞,實際上只是傳入了一個引數:
使用urlencode編碼處理後:
<?php
$subject = "php&detail=html";
$subject = urlencode($subject);
echo "<a href='./02.php?sjt=$subject'>php0713</a>";