簡易解析ajax,javascript-XMLHttpRequest,解決亂碼問題

XMLHttpRequest可以提供不重新加載頁面的情況下更新網頁

亂碼主要是由於js中文傳參影響的

解決方法:

                 xhr.open("post", "/Search.aspx?q=" + encodeURI(str), true);

<!DOCTYPE html>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="jquery-1.7.min.js" type="text/javascript"></script>
    <title>解析XMLHttpRequest</title>
</head>
<body>
    <form id="ajax" name="ajax" method="post" runat="server">
        <div>
            <input type="text" name="search" id="search" />
            <input type="button" name="go" id="go" value="搜索" />
            <div id="result"></div>
        </div>
    </form>
</body>
</html>
<script type="text/javascript">
    var xhr = null;
    $(function () {
        $("#go").click(function () {
            var str = $("#search").val();
            if ($.trim(str) == "") {
                $("#result").html("請輸入要搜索的內容.");
            }
            else {
                _search(str);
            }
        });
    });
    function _search(str) {
        try {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                try {
                    xhr = new XMLHttpRequest();
                } catch (e) {
                    alert("您的瀏覽器不支持ajax.");
                }
            }
        }
        xhr.onreadystatechange = _CallBack;
        xhr.open("post", "/Search.aspx?q=" + encodeURI(str), true);
        xhr.send(null);
    }
    function _CallBack() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            $("#result").html(xhr.responseText);
        }
    }
</script>

//search.aspx.cs

using System;

namespace MyAjax
{
    public partial class Search : System.Web.UI.Page
    {
        protected override void OnPreInit(EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString["q"] != null)
                {
                    string str = Server.UrlDecode(Request.QueryString["q"].ToString().Trim());
                    //清空輸出
                    Response.Clear();
                    //設置頁面無緩存
                    Response.Buffer = true;
                    Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
                    Response.Expires = 0;
                    Response.CacheControl = "no-cache";
                    Response.AppendHeader("Pragma", "No-Cache");
                    Response.Cache.SetNoStore();
                    Response.ClearContent();
                    //輸出
                    Response.Write("您是不是要找:<br />" + str);
                    //結束輸出
                    Response.End();
                }
            }
        }
    }
}


//方法

abort()

取消當前響應,關閉連接並且結束任何未決的網絡活動。

這個方法把 XMLHttpRequest 對象重置爲 readyState 爲 0 的狀態,並且取消所有未決的網絡活動。例如,如果請求用了太長時間,而且響應不再必要的時候,可以調用這個方法。


getAllResponseHeaders()

把 HTTP 響應頭部作爲未解析的字符串返回。

如果 readyState 小於 3,這個方法返回 null。否則,它返回服務器發送的所有 HTTP 響應的頭部。頭部作爲單個的字符串返回,一行一個頭部。每行用換行符 "" 隔開。


getResponseHeader()

返回指定的 HTTP 響應頭部的值。其參數是要返回的 HTTP 響應頭部的名稱。可以使用任何大小寫來制定這個頭部名字,和響應頭部的比較是不區分大小寫的。

該方法的返回值是指定的 HTTP 響應頭部的值,如果沒有接收到這個頭部或者 readyState 小於 3 則爲空字符串。如果接收到多個有指定名稱的頭部,這個頭部的值被連接起來並返回,使用逗號和空格分隔開各個頭部的值。


open()

//open(method, url, async, username, password)

初始化 HTTP 請求參數,例如 URL 和 HTTP 方法,但是並不發送請求。


send()

發送 HTTP 請求,使用傳遞給 open() 方法的參數,以及傳遞給該方法的可選請求體。


setRequestHeader()

向一個打開但未發送的請求設置或添加一個 HTTP 請求。

//屬性

狀態
名稱
描述
0
Uninitialized
初始化狀態。XMLHttpRequest 對象已創建或已被 abort() 方法重置。
1
Open
open() 方法已調用,但是 send() 方法未調用。請求還沒有被髮送。
2
Send
Send() 方法已調用,HTTP 請求已發送到 Web 服務器。未接收到響應。
3
Receiving
所有響應頭部都已經接收到。響應體開始接收但未完成。
4
Loaded
HTTP 響應已經完全接收。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章