zoukankan      html  css  js  c++  java
  • 新瓶旧酒ASP.NET AJAX(8) 客户端脚本编程(Sys.Net命名空间下的WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor)

    [索引页]
    [源码下载]


    新瓶旧酒ASP.NET AJAX(8) - 客户端脚本编程(Sys.Net命名空间下的WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor)


    作者:webabcd


    介绍
    学习一下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
        ·abort(); - 终止请求
        ·executeRequest(); - 执行请求
        ·getAllResponseHeaders(); - 获得全部头信息
        ·getResponseHeader(key); - 获得指定头信息
        ·aborted - 请求是否被终止
        ·responseAvailable - 请求是否成功完成
        ·responseData - 响应当前请求的Body文本
        ·started - 是否已经开始处理请求
        ·statusCode - 状态代码
        ·statusText - 状态信息
        ·timedOut - 请求是否超时
        ·xml - 响应当前请求的XMLDOM对象


    示例
    GetTarget.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      
    <employee>
        
    <name>webabcd</name>
        
    <age>27</age>
      
    </employee>
      
    <employee>
        
    <name>ge</name>
        
    <age>26</age>
      
    </employee>
    </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(01000));

                
    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()
    {
        
    // 创建WebRequest对象
        var wRequest =  new Sys.Net.WebRequest();
        
        
    // url - 请求的url 
        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.add_completed(OnWebRequestCompleted);

        displayElement.innerHTML 
    = "";
                   
        
    // invoke() - 执行请求
        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();
            displayElement.innerHTML 
    += "<br /><br />";
      
            
    // 显示Web Request的所有Header          
            // getAllResponseHeaders() - 获得全部头信息
            displayElement.innerHTML += "Headers:" + executor.getAllResponseHeaders();
            displayElement.innerHTML 
    += "<br /><br />";
            
            
    // 显示Web Request的指定Header
            // getResponseHeader() - 获得指定头信息
            displayElement.innerHTML += executor.getResponseHeader("Content-Type");
            displayElement.innerHTML 
    += "<br /><br />";
            
            
    // 显示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();
            }

            displayElement.innerHTML 
    += "<br /><br />";
            
            
    // 显示XML数据
            displayElement.innerHTML += "XML:";
            
    if (document.all)
            
    {
                
    // xml - 响应当前请求的XMLDOM对象
                displayElement.innerText += "\r\n" + executor.get_xml().xml;
            }

            
    else
            
    {
                
    // Firefox
                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" onclick="GetWebRequest()" value="GetWebRequest" />
        
    </p>
        
    <p>
            
    <input type="button" id="btnPostWebRequest" onclick="PostWebRequest()" value="PostWebRequest" />
        
    </p>
        
    <hr />
        
    <div id="resultId" style="background-color: Aqua;">
        
    </div>
    </asp:Content>

    运行结果
    1、单击“GetWebRequest”按钮
    弹出框,信息:当前的URL
    显示与“GetTarget.xml”相关的结果

    2、单击“PostWebRequest”按钮
    可能提示超时,也可能显示与“PostTarget.aspx”相关的结果


    WebRequestManagerAndXMLHttpExecutor.js
    var displayElement;

    function pageLoad()
    {
        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()
    {
        
    // 创建WebRequest对象
        wRequest =  new Sys.Net.WebRequest();

        
    // url - 请求的url 
        wRequest.set_url("PostTarget.aspx");
          
        
    if (document.all)
        
    {
            displayElement.innerText 
    = "";
        }

        
    else
        
    {
            
    // Firefox 
            displayElement.textContent = "";
        }

       
        
    // invoke() - 执行请求
        wRequest.invoke();
        
        
    if (new Date().getSeconds() % 2 == 0)
        
    {
            
    // executor - 与当前WebRequest对象相关的executor
            var executor = wRequest.get_executor();
         
            
    // abort() - 终止请求
            executor.abort();
            
            
    // aborted - 与当前executor相关的请求是否被终止
            alert('请求是否被终止:' + executor.get_aborted());
        }

    }


    // executor - WebRequestExecutor对象
    function OnWebRequestCompleted(executor, e) 
    {        
        
    // responseAvailable - 请求是否成功完成
        if(executor.get_responseAvailable()) 
        
    {
             
    // 显示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();
            }

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

        
    else
        
    {
            
    // timedOut - 请求是否超时
            if (executor.get_timedOut())
            
    {
                alert(
    "超时");
            }

            
    // aborted - 请求是否被终止
            else if (executor.get_aborted())
            
    {
                alert(
    "请求被终止");
            }

        }

    }


    function ExecuteRequest()
    {    
        
    // 创建WebRequest对象
        var wRequest =  new Sys.Net.WebRequest();
        
        
    // url - 请求的url 
        wRequest.set_url("GetTarget.xml");
        
        
    // 创建XMLHttpExecutor对象
        var executor = new Sys.Net.XMLHttpExecutor();
       
        
    // executor - 与当前WebRequest对象相关的executor
        wRequest.set_executor(executor); 
        
        
    // executeRequest() - 执行请求
        executor.executeRequest();

        
    // executor - 与当前WebRequest对象相关的executor
        var executor =  wRequest.get_executor();
        
        
    // started - 是否已经开始处理请求
        alert("executor是否已经开始处理请求:" + executor.get_started())
    }


    // 通知ScriptManager这段脚本已经加载完毕  
    if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

    WebRequestManagerAndXMLHttpExecutor.aspx
    <%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="WebRequestManagerAndXMLHttpExecutor.aspx.cs"
        Inherits
    ="ClientScripting_SysNet_WebRequestManagerAndXMLHttpExecutor" Title="WebRequestManager和XMLHttpExecutor" 
    %>

    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
        
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="Server">
            
    <scripts>
                
    <asp:ScriptReference Path="~/ClientScripting/SysNet/WebRequestManagerAndXMLHttpExecutor.js" />
            
    </scripts>
        
    </asp:ScriptManagerProxy>
        
    <p>
            
    <input type="button" id="btnGetData" onclick="GetData()" value="GetData" />
        
    </p>
        
    <p>
            
    <input type="button" id="btnExecuteRequest" onclick="ExecuteRequest()" value="ExecuteRequest" />
        
    </p>
        
    <hr />
        
    <div id="resultId" style="background-color: Aqua;">
        
    </div>
    </asp:Content>

    运行结果
    1、单击“GetData”按钮
    可能提示超时,也可能提示终止,也可能显示与“PostTarget.aspx”相关的结果

    2、单击“ExecuteRequest”按钮
    提示executor已经开始处理请求,显示与“GetTarget.xml”相关的结果


    OK
    [源码下载]
  • 相关阅读:
    【1】排行榜算法设计
    基础问答【二】
    基础问答【一】
    【1】c语言
    (五)帧同步与状态同步
    (四)c++虚函数详解
    (三)git pull报错解决方案,Your local changes to the following files would be overwritten by merge
    (二)干货!获取该目录下,指定权限不为770的文件, 并设置权限为770
    【8】java新特性,双冒号 :: 的使用场景
    go(01) 基础语法
  • 原文地址:https://www.cnblogs.com/webabcd/p/794434.html
Copyright © 2011-2022 走看看