ajax xmlhttp下open方法POST、GET參數的區別


1. get是從服務器上獲取數據(會暴露客戶端ip),post是向服務器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。

建議:

1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;
2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;


1 問題描述:
xmlhttp:open方法,請求頁面的時候,更新頁面數據后,第2次拿到的結果還是上次的信息
2 解決辦法:
改用POST方式
3 說明:
xmlhttp:open方法
創建一個新的http請求,並指定此請求的方法、URL以及驗證信息
語法

oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
參數

bstrMethod
http方法,例如:POST、GET、PUT及PROPFIND。大小寫不敏感。
/*****
POST:用"POST"方式發送數據,可以大到4MB
GET:用"GET"方式發送數據,只能256KB
如果請求帶有參數的化實用POST方式,POST方式將參數放置在頁面的隱藏控件內
沒有參數使用GET方式
對於請求的頁面在中途可能發生更改的,也最好用POST方式
用GET方式可能會拿不到最新的信息
*****/
bstrUrl
請求的URL地址,可以為絕對地址也可以為相對地址。
varAsync[可選]
布爾型,指定此請求是否為異步方式,默認為true。如果為真,當狀態改變時會調用onreadystatechange屬性指定的回調函數。
bstrUser[可選]
如果服務器需要驗證,此處指定用戶名,如果未指定,當服務器需要驗證時,會彈出驗證窗口。
bstrPassword[可選]
驗證信息中的密碼部分,如果用戶名為空,則此值將被忽略。

Example

下面的例子演示從服務器請求book.xml,並顯示其中的book字段。

 代碼如下 復制代碼
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET","http://localhost/books.xml", false); 沒有參數且不會發生改變的用GET,否則用POST
xmlhttp.send();
var book = xmlhttp.responseXML.selectSingleNode("//book[@id=''''bk101'''']");
alert(book.xml);
 

備注

調用此方法后,可以調用send方法向服務器發送數據。

調用頁面

 代碼如下 復制代碼
<script language="javascript" type="text/javascript">
function UpdateData()
{
var ServerUrl = window.location.href;
var str = ServerUrl.split("/");
var ServerUrl = "http://"+str[2];
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var serverURL=ServerUrl+"/GetTemp.aspx";
xmlhttp.Open("POST",serverURL, false);
xmlhttp.Send("adst");
xmlhttp = null;
}
</script>
 

處理頁面,得到傳入的數據

 代碼如下 復制代碼
private string GetInput()
{
System.IO.Stream s = Request.InputStream;
int count = 0;
byte[] buffer = new byte[1024];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 1024)) > 0)
{
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
}

return builder.ToString();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM