1、 get是把參數資料隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。
2、 對於get方式,伺服器端用Request.QueryString擷取變數的值,對於post方式,伺服器端用Request.Form擷取提交的資料。兩種方式的參數都可以用Request來獲得。
3、get傳送的資料量較小,不能大於2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,因伺服器的不同而異.
4、get安全性非常低,post安全性較高。
5、 <form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一樣的,也就是說,method為get時action頁面後邊帶的參數列表會被忽視;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一樣的
學習 Ajax 的 Post,程式效果請參看 Ajax 的 Post 傳值。
代碼如下 |
複製代碼 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ajax Post 傳值</title> </head> <script language="javascript"> function saveUserInfo() { //擷取接受返回資訊層 var msg = document.getElementById("msg"); //擷取表單對象和使用者資訊值 var f = document.user_info; var userName = f.user_name.value; var userAge = f.user_age.value; var userSex = f.user_sex.value; //接收表單的URL地址 var url = "ajax_output1.php"; //需要POST的值,把每個變數都通過&來聯結 var postStr = "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex; //執行個體化Ajax //var ajax = InitAjax(); var ajax = false; //開始初始化XMLHttpRequest對象 if(window.XMLHttpRequest) { //Mozilla 瀏覽器 ajax = new XMLHttpRequest(); if (ajax.overrideMimeType) { //設定MiME類別 ajax.overrideMimeType("text/xml"); } } else if (window.ActiveXObject) { // IE瀏覽器 try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!ajax) { // 異常,建立對象執行個體失敗 window.alert("不能建立XMLHttpRequest對象執行個體."); return false; }
//通過Post方式開啟串連 ajax.open("POST", url, true); //定義傳輸的檔案HTTP頭資訊 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //發送POST資料 ajax.send(postStr); //擷取執行狀態 ajax.onreadystatechange = function() { //如果執行狀態成功,那麼就把返回資訊寫到指定的層裡 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } } } </script> <body > <div id="msg"></div> <form name="user_info" method="post" action=""> 姓名:<input type="text" name="user_name" /><br /> 年齡:<input type="text" name="user_age" /><br /> 性別:<input type="text" name="user_sex" /><br /> <input type="button" value="提交表單" onClick="saveUserInfo()"> </form> </body> </html> |
然後是 Ajax 的 Get,用途是從伺服器擷取值。
程式效果請參看 Ajax 的 Get 傳值。
代碼如下 |
複製代碼 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ajax Get 傳值</title> </head> <script language="javascript"> function saveUserInfo() { //擷取接受返回資訊層 var msg = document.getElementById("msg"); //擷取表單對象和使用者資訊值 var f = document.user_info; var userName = f.user_name.value; var userAge = f.user_age.value; var userSex = f.user_sex.value; //接收表單的URL地址 var url = "ajax_output2.php? user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex; //執行個體化Ajax //var ajax = InitAjax(); var ajax = false; //開始初始化XMLHttpRequest對象 if(window.XMLHttpRequest) { //Mozilla 瀏覽器 ajax = new XMLHttpRequest(); if (ajax.overrideMimeType) {//設定MiME類別 ajax.overrideMimeType("text/xml"); } } else if (window.ActiveXObject) { // IE瀏覽器 try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!ajax) { // 異常,建立對象執行個體失敗 window.alert("不能建立XMLHttpRequest對象執行個體."); return false; } //通過Post方式開啟串連 ajax.open("GET", url, true); //發送GET資料,已經在URL中賦了值所以send那裡只要加個空參. ajax.send(null); //擷取執行狀態 ajax.onreadystatechange = function() { //如果執行狀態成功,那麼就把返回資訊寫到指定的層裡 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } } } </script> <body> <div id="msg"></div> <form name="user_info" method="post" action=""> <input type="text" name="user_name" style="display:none;" /> <input type="text" name="user_age" style="display:none;" /> <input type="text" name="user_sex" style="display:none;" /> <input type="button" value="擷取伺服器變數" onClick="saveUserInfo()"> </form> </body> |
ajax_output2.php
代碼如下 |
複製代碼 |
<? $user_name = "Gonn"; echo $user_name; $user_age = "24"; echo $user_age; $user_sex = "Man"; echo $user_sex; ?> |
總結
現在我們再看看通過URL發送請求時,get方式和post方式的區別。用下面的例子可以很容易的看到同樣的資料通過GET和POST來發送的區別, 發送的資料是 username=張三 :
GET 方式, 瀏覽器鍵入 http://localhost?username=張三
代碼如下 |
複製代碼 |
GET /?username=%E5%BC%A0%E4%B8%89 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: localhost Connection: Keep-Alive
|
POST 方式:
代碼如下 |
複製代碼 |
POST / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: localhost Content-Length: 28 Connection: Keep-Alive username=%E5%BC%A0%E4%B8%89 |