各種版本的Ajax層出不禁,但萬變不離其宗,各種版本都是給予最原始的XMLHttpRequest發送http請求實現,其請求類型有兩種,即get和post方式。這兩種方式的使用如下代碼:
一、Ajax請求頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ajax原理</title>
<script type="text/javascript">
///擷取XMLHttpRequest對象
function getXMLHttpRequest(){
var xmlHttp;
///IE下
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHttp");
}
///Firefox下
else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
return xmlHttp;
}
///開始非同步呼叫(Get方法)
function startRequestGet(){
var xmlHttp=getXMLHttpRequest();
xmlHttp.open("get","ajax.aspx?name=NameGet&birthday=1900-1-1",true);//Firefox中必須用非同步,即最後一個參數要為true
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4 && xmlHttp.status==200){ //xmlHttp.status!=200表示非同步不成功
//alert(xmlHttp.responseText);
document.getElementById("target").innerHTML=xmlHttp.responseText;
}
}
//發送請求
xmlHttp.send(null);
}
///開始非同步呼叫(Post方法,用send方法發送值如(xmlHttp.send('name=jack&birthday=2008-8-8')))
function startRequestPost(){
var xmlHttp=getXMLHttpRequest();
var data="name=NamePost&birthday=2008-12-22";
var url="ajax.aspx?"+data;//如果在IE裡無需加data,而Firefox內必須加上用以發送資料
xmlHttp.open("get", url+'(FireFox)' , true);
xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); //使用post方法發送資料時需要這句
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4 && xmlHttp.status==200){
//alert(xmlHttp.responseText);
document.getElementById("target").innerHTML=xmlHttp.responseText;
}
}
//發送請求
xmlHttp.send(data+"(IE)");//如果在Firefox只需發送null,而在iE內必鬚髮送data
/*註:
*在IE內post的資料是在xmlHttp.send(data)發送過去的,data即為要發送的資料,而在Firefox內資料是通過url發送的。
*/
}
</script>
</head>
<body>
<input type="button" onclick="startRequestGet()" value="開始非同步通訊測試(Get方式)" /><br />
<input type="button" onclick="startRequestPost()" value="開始非同步通訊測試(Post方式)" />
<br /><br />
<div id="target" style=" width:100px; height:100px; border:solid 1px #ff0000;"></div>
</body>
</html>
二、處理請求頁面"ajax.aspx"的主要代碼
protected void Page_Load(object sender, EventArgs e)
{
string type = Request.HttpMethod;
if (type == "GET") //用Get發送請求,查詢字串方式獲得
{
Response.Write(string.Format("GET:Name:{0},Birthday:{1}.", Request.QueryString["name"], Request.QueryString["birthday"]));
}
else if (type == "POST") //用Post發送請求,Form方式獲得
{
Response.Write(string.Format("POST:Name:{0},Birthday:{1}.", Request.Form["name"], Request.Form["birthday"]));
}
}