利用 Microsoft.XMLHTTP/XMLHttpRequest 物件 實現Ajax技術 的總結
阿新 • • 發佈:2019-01-14
一、實現Ajax的方法
Ajax可以通過 Microsoft.XMLHTTP/XMLHttpRequest 物件、jQuery、Msxml2.XMLHTTP物件來實現,asp.net自身也提供了對Ajax的支援(見:工具欄-Ajax擴充套件),本文僅討論第一種,並且使用asp.net編寫。
二、實現Ajax的總結
1.JavaScript對大小寫敏感,當你遇到問題時請檢查程式碼,尤其是Microsoft.XMLHTTP/XMLHttpRequest物件的屬性和方法,該大寫就大寫,該小寫就小寫,參見百度百科等。
2.不管你使用POST還是GET方法呼叫open()函式,服務端程式碼只能用 Request[“key”].ToString()、或者Request.QueryString[“index/name”].ToString()接收,接收前可先判斷是否為空:if(Request["name"] != null)或if(Request.QueryString["name"] != null)
3.如果你想使用IsPostBack來確定是不是第一次載入網頁恐怕不行了,IsPostBack始終為false,也就是始終都是第一次載入頁面(怎麼可能呢)。至於為什麼?三言兩語是說不清,道不明的。(當然,想要改變IsPostBack的值也不是不可能,使用asp.ne中的UpdatePanel可解決此問題)
4.服務端的Respose.Flush();函式可能會不好使,自己想辦法吧...(使用asp.net自帶的Ajax擴充套件吧)
aspx程式碼:Home.aspx
<form id="LoginForm" runat="server" onsubmit="return Onclick()">
JavaScript程式碼:客戶端
function Onclick() { var acc = document.getElementById("TextBox_Username").value; var pas = document.getElementById("TextBox_Password").value; var xmlhttp; try { if (window.ActiveXObject) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { alert("物件初始化錯誤,請嘗試使用其他瀏覽器!"); } } catch (err) { alert("物件初始化錯誤,請嘗試使用其他瀏覽器!\r\n錯誤:" + err); } try { xmlhttp.open("POST", "Home.aspx?TextBox_Username=" + acc + "&TextBox_Password=" + pas, true); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { alert(xmlhttp.responseText); } } xmlhttp.send(null); } catch (err) { alert(err); } return false; //阻止提交表單 }
C#程式碼:服務端
protected void Page_Load(object sender, EventArgs e)
{
if (Request["TextBox_Username"] != null && Request["TextBox_Password"] != null)//判空
{
string account = Request["TextBox_Username"].ToString();//取值
string password = Request["TextBox_Password"].ToString();
Response.Clear();
Response.Write("你好!");
Response.Flush();
//Response.End();
//其他操作
}
else
{
//其他操作
}
}
/ / 本人在vs2012 + Firefox 中測試的,其他環境下結果可能不同,如有錯誤請指出,謝謝!