1. 程式人生 > >Ajax之get方式請求

Ajax之get方式請求

ajax之get請求需要注意的兩個地方:

  1. 在url後邊以請求字串(傳遞的get引數資訊)形式傳遞資料。
  2. 中文、=、&等特殊符號處理

對特殊資訊的處理:

在瀏覽器裡通過get引數傳遞一些特殊符號資訊會被誤解混淆,例如&、=等;

為了避免特殊符號被誤解產生歧義,需要對其進行編碼處理

同時如果傳遞get引數中文資訊,也需要進行編碼處理。

  1. 在php裡邊可以通過函式urlencode()/urldecode()對特殊符號進行編碼,反編碼處理。
  2. 在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>";

效果如下,特殊符號被編碼處理,只作為一個引數處理: