天天看點

新瓶舊酒ASP.NET AJAX(8) - 用戶端腳本程式設計(Sys.Net命名空間下的WebRequestManager)

新瓶舊酒ASP.NET AJAX(8) - 用戶端腳本程式設計(Sys.Net命名空間下的WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor)

介紹

學習一下Sys.Net命名空間下與web請求相關的類,WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor

關鍵

1、Sys.Net.WebRequestManager Class

    ·add_completedRequest(handler); - 添加請求完成後的處理器

    ·remove_completedRequest(handler); - 移除請求完成後的處理器

    ·add_invokingRequest(handler); - 添加處理調用請求的處理器

    ·remove_invokingRequest(handler); - 移除處理調用請求的處理器

    ·defaultTimeout - 預設逾時時間

2、Sys.Net.WebRequest Class

    ·add_completed(handler); - 添加請求完成後的處理器

    ·remove_completed(handler); - 移除請求完成後的處理器

    ·invoke(); - 執行請求

    ·getResolvedUrl(); - 轉換為可用url

    ·body - HTTP的Body内容

    ·executor - 與目前WebRequest對象相關的executor

    ·headers - HTTP的頭資訊

    ·httpVerb - HTTP請求方式“GET”或“POST”

    ·timeout - 請求逾時時間

    ·url - 請求的url

    ·userContext - 使用者上下文

3、Sys.Net.WebRequestExecutor Class

    ·abort(); - 終止請求

    ·executeRequest(); - 執行請求

    ·getAllResponseHeaders(); - 獲得全部頭資訊

    ·getResponseHeader(key); - 獲得指定頭資訊

    ·aborted - 請求是否被終止

    ·responseAvailable - 請求是否成功完成

    ·responseData - 響應目前請求的Body文本

    ·started - 是否已經開始處理請求

    ·statusCode - 狀态代碼

    ·statusText - 狀态資訊

    ·timedOut - 請求是否逾時

    ·xml - 響應目前請求的XMLDOM對象

    ·webRequest - 獲得與目前executor相關的WebRequest對象

4、Sys.Net.XMLHttpExecutor Class

示例

GetTarget.xml

<?xml version="1.0" encoding="utf-8" ?> 

<root> 

    <employee> 

        <name>webabcd</name> 

        <age>27</age> 

    </employee> 

        <name>ge</name> 

        <age>26</age> 

</root>

PostTarget.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PostTarget.aspx.cs" Inherits="ClientScripting_SysNet_PostTarget" %> 

<!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 runat="server"> 

        <title>Post Target測試頁</title> 

        <script language="C#" runat="server"> 

                protected void Page_Load(object sender, EventArgs e) 

                { 

                        Context.Response.Cache.SetNoStore(); 

                        System.Threading.Thread.Sleep(new Random().Next(0, 1000)); 

                        if (HttpContext.Current.Request.Form["Message"] != null) 

                        { 

                                Label1.Text = HttpContext.Current.Request.Form["Message"]; 

                        } 

                } 

        </script> 

</head> 

<body> 

        <form id="form1" runat="server"> 

                <div> 

                        <h1> 

                                <%= DateTime.Now.ToString() %> 

                        </h1> 

                        <p> 

                                <asp:TextBox ID="Label1" Text="test" runat="server" /> 

                        </p> 

                </div> 

        </form> 

</body> 

</html>

WebRequestAndWebRequestExecutor.js

var getPage; 

var postPage; 

var displayElement; 

function pageLoad() 

        getPage = "GetTarget.xml"; 

        postPage = "PostTarget.aspx"; 

        displayElement = $get("resultId"); 

function GetWebRequest() 

        // 建立WebRequest對象 

        var wRequest =    new Sys.Net.WebRequest(); 

        // url - 請求的url    

        wRequest.set_url(getPage); 

        // getResolvedUrl() - 轉換為可用url 

        alert(wRequest.getResolvedUrl()); 

        // httpVerb - HTTP請求方式“GET”或“POST” 

        wRequest.set_httpVerb("GET"); 

        // userContext - 使用者上下文 

        wRequest.set_userContext("webabcd"); 

        wRequest.add_completed(OnWebRequestCompleted); 

        displayElement.innerHTML = ""; 

        // invoke() - 執行請求 

        wRequest.invoke(); 

function PostWebRequest() 

        wRequest.set_url(postPage); 

        // timeout - 逾時時間 

        wRequest.set_timeout(500); 

        var body = "Message=資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊資訊" 

        // body - HTTP的Body内容 

        wRequest.set_body(body); 

        // headers - HTTP的頭資訊 

        wRequest.get_headers()["Content-Length"] = body.length; 

        wRequest.invoke();     

// executor - WebRequestExecutor對象 

function OnWebRequestCompleted(executor, e)    

{                 

        // responseAvailable - 請求是否成功完成 

        if(executor.get_responseAvailable())    

        { 

                displayElement.innerHTML = ""; 

                // 顯示Web Request的使用者上下文 

                // webRequest - 獲得與目前executor相關的WebRequest對象 

                // userContext - 使用者上下文 

                displayElement.innerHTML += "User Context:" + executor.get_webRequest().get_userContext(); 

                displayElement.innerHTML += "<br /><br />"; 

                // 顯示Web Request的狀态             

                // statusCode - 狀态代碼 

                // statusText - 狀态資訊 

                displayElement.innerHTML += "Status Code:" + executor.get_statusCode(); 

                displayElement.innerHTML += "Status Text:" + executor.get_statusText(); 

                // 顯示Web Request的所有Header                     

                // getAllResponseHeaders() - 獲得全部頭資訊 

                displayElement.innerHTML += "Headers:" + executor.getAllResponseHeaders(); 

                // 顯示Web Request的指定Header 

                // getResponseHeader() - 獲得指定頭資訊 

                displayElement.innerHTML += executor.getResponseHeader("Content-Type"); 

                // 顯示Web Request的Body                                    

                displayElement.innerHTML += "Body:"; 

                if (document.all) 

                        // responseData - 響應目前請求的Body文本 

                        displayElement.innerText += "\r\n" + executor.get_responseData(); 

                else 

                        // Firefox 

                        displayElement.textContent += "\r\n" + executor.get_responseData(); 

                // 顯示XML資料 

                displayElement.innerHTML += "XML:"; 

                        // xml - 響應目前請求的XMLDOM對象 

                        displayElement.innerText += "\r\n" + executor.get_xml().xml; 

                        displayElement.textContent += "\r\n" + "首節點:" + executor.get_xml().documentElement.nodeName; 

        } 

        else 

                // timedOut - 請求是否逾時 

                if (executor.get_timedOut()) 

                        alert("逾時"); 

                // aborted - 請求是否被終止 

                else if (executor.get_aborted()) 

                        alert("請求被終止"); 

// 通知ScriptManager這段腳本已經加載完畢     

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

WebRequestAndWebRequestExecutor.aspx

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="WebRequestAndWebRequestExecutor.aspx.cs" 

        Inherits="ClientScripting_SysNet_WebRequestAndWebRequestExecutor" Title="WebRequest和WebRequestExecutor" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 

        <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="Server"> 

                <Scripts> 

                        <asp:ScriptReference Path="~/ClientScripting/SysNet/WebRequestAndWebRequestExecutor.js" /> 

                </Scripts> 

        </asp:ScriptManagerProxy> 

        <p> 

                <input type="button" id="btnGetWebRequest" value="GetWebRequest" /> 

        </p> 

                <input type="button" id="btnPostWebRequest" value="PostWebRequest" /> 

        <hr /> 

        <div id="resultId" style="background-color: Aqua;"> 

        </div> 

</asp:Content>

運作結果

1、單擊“GetWebRequest”按鈕

彈出框,資訊:目前的URL

顯示與“GetTarget.xml”相關的結果

2、單擊“PostWebRequest”按鈕

可能提示逾時,也可能顯示與“PostTarget.aspx”相關的結果

WebRequestManagerAndXMLHttpExecutor.js

        displayElement = $get("ResultId"); 

        // defaultTimeout - 預設逾時時間 

        Sys.Net.WebRequestManager.set_defaultTimeout(500); 

        Sys.Net.WebRequestManager.add_completedRequest(OnWebRequestCompleted); 

        Sys.Net.WebRequestManager.add_invokingRequest 

        ( 

                function (executor, e) 

                        alert('調用請求前'); 

        ); 

function GetData() 

        wRequest =    new Sys.Net.WebRequest(); 

        wRequest.set_url("PostTarget.aspx"); 

        if (document.all) 

                displayElement.innerText = ""; 

                // Firefox    

                displayElement.textContent = ""; 

        if (new Date().getSeconds() % 2 == 0) 

                // executor - 與目前WebRequest對象相關的executor 

                var executor = wRequest.get_executor(); 

                // abort() - 終止請求 

                executor.abort(); 

                // aborted - 與目前executor相關的請求是否被終止 

                alert('請求是否被終止:' + executor.get_aborted()); 

                 // 顯示Web Request的Body                                    

function ExecuteRequest() 

{         

        wRequest.set_url("GetTarget.xml"); 

        // 建立XMLHttpExecutor對象 

        var executor = new Sys.Net.XMLHttpExecutor(); 

        // executor - 與目前WebRequest對象相關的executor 

        wRequest.set_executor(executor);    

        // executeRequest() - 執行請求 

        executor.executeRequest(); 

        var executor =    wRequest.get_executor(); 

        // started - 是否已經開始處理請求 

        alert("executor是否已經開始處理請求:" + executor.get_started()) 

WebRequestManagerAndXMLHttpExecutor.aspx

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="WebRequestManagerAndXMLHttpExecutor.aspx.cs" 

        Inherits="ClientScripting_SysNet_WebRequestManagerAndXMLHttpExecutor" Title="WebRequestManager和XMLHttpExecutor" %> 

                <scripts> 

                        <asp:ScriptReference Path="~/ClientScripting/SysNet/WebRequestManagerAndXMLHttpExecutor.js" /> 

                </scripts> 

                <input type="button" id="btnGetData" value="GetData" /> 

                <input type="button" id="btnExecuteRequest" value="ExecuteRequest" /> 

1、單擊“GetData”按鈕

可能提示逾時,也可能提示終止,也可能顯示與“PostTarget.aspx”相關的結果

2、單擊“ExecuteRequest”按鈕

提示executor已經開始處理請求,顯示與“GetTarget.xml”相關的結果

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/344807,如需轉載請自行聯系原作者