1. 程式人生 > >利用 Microsoft.XMLHTTP/XMLHttpRequest 物件 實現Ajax技術 的總結

利用 Microsoft.XMLHTTP/XMLHttpRequest 物件 實現Ajax技術 的總結

一、實現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 中測試的,其他環境下結果可能不同,如有錯誤請指出,謝謝!