Ajax的GET和POST的两种提交方法,get主要是少量数据的提交,在这里我谈谈用post方法发送大量数据的过程.
此处我将所有内容打包为一个xml文件流,避免了长参数的发送,在服务器端直接载入xml解析,十分方便,数据也没有丢失现象.
下为过程的实现思路:
第一步:创建一个XML的DOM对象,可用如下方法完成
function CreateDomDoc() //创建XML文档对象
{
Var signatures = ["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","Microsoft.XmlDom"];
for(var i=0;i<signatures.length;i++)
{
try
{
var domDoc = new ActiveXObject(signatures[i]);
return domDoc;
}
catch(e)
{
}
}
return null;
}
第二步:从客户端取得数据写入XM,方法如下:
function CreateXml(doc)
{
var root= doc.createElement("root");
var title= doc.createElement("title");
title.text= document.getElementById("title").value;
root.appendChild(title);
var homepage = doc.createElement("homepage");
homepage.text= document.getElementById("homepage").value;
root.appendChild(homepage);
doc.appendChild(root);
//alert("ddddd");
return doc.xml;
}
第三步 互相调用
var domDoc = CreateDomDoc(); //创建对象 将用send发送到服务器端
if(domDoc!=null)
{
var xml = CreateXml(domDoc); //写入xml 返回xml文档
alert(domDoc);//
}
else
{
alert("未安装MSXML控件");
}
第四步 AJAX发送
var xmlhttp=createxmlhttp();
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
info =xmlhttp.responseText;
//alert(info);
}
else
{
alert("ajax调用失败!"+xmlhttp.status);
}
}
}
xmlhttp.open("POST","ajaxserver.aspx?type=add",false);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); //关键,否则出错
xmlhttp.send(domDoc); //发送一定是domDoc文档对象,如果只发送xml将出错”statue=500”
服务器端:
设置接受类型,防止中文出现乱码情况
Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
XmlDocument xmldoc = new XmlDocument(); //建立xml文档对象
xmldoc.Load(Request.InputStream); //接受ajax发送的xml文档对象流 //也可以接受普通字符流
XmlNode node = xmldoc.SelectSingleNode("//title"); //获得title节点
title = node.InnerText; //取得节点值
部分解释:
xmlhttp.open("POST","ajaxserver.aspx?type=add",false);
open方法至少包含上述三个参数,
post/get :发送类型
ajaxserver.aspx?type=add :请求页面路径
false : 可以是true,当为true是请求异步,发送可以可以继续使用表单,false时发送后锁定表单,直到返回结果.