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時發送後鎖定表單,直到返回結果.