读书人

[转载]Ajax学习札记_open方法中的POST

发布时间: 2012-09-20 09:36:50 作者: rapoo

[转载]Ajax学习笔记_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方法,例如:POSTGET、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();
}

??? 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null。

??? 此外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方法。
例如:
  xmlHttp.open("POST","login.jsp",true);
  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
  xmlHttp.send("user="+username+"&pwd="+password);
  需要注意的是根据提交方式的不同,两种提交方式分别调用后台的doGet方法和doPost方法。

读书人网 >操作系统

热点推荐