使用 AJAX 的 Sys.Net.WebRequest 从客户端请求网页

         MS AJAX对JS进行了功能上的扩展,今天给大家讲述一下利用 Sys.Net.WebRequest 进行请求网页的一个例子.完整的程序代码: DoRequest.rar
         新建网站,选择 ASP.NET AJAX-Enabled Web Site。
         向网站中添加一个js文件 WebRequest.js。
         添加三个全局变量:
None.gif var getPage;
None.gifvar postPage;
None.gifvar displayElement;
None.gif

         getPage              GET方法将要请求的URL。
         postPage            POST方法将要请求的URL。
         displayElement   显示请求结果的HTML标签。

         添加初始化函数:
None.gif function pageLoad()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    getPage 
= "getTarget.htm";
InBlock.gif    postPage 
= "postTarget.aspx";
InBlock.gif    displayElement 
= $get("ResultId");
ExpandedBlockEnd.gif}
         在这个函数中指定了默认的请求页面和用来显示结果的HTML标签。
         
         下面是两个主要的请求函数,代码已经加入了注释,请读者仔细阅读。
         利用Sys.Net.WebRequest()执行GET方法的函数:

None.gif function GetWebRequest()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    alert(
"Performing Get Web request.");
InBlock.gif    
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(getPage);  
InBlock.gif    
InBlock.gif    
// 设置请求方法.
InBlock.gif
    wRequest.set_httpVerb("GET");
InBlock.gif          
InBlock.gif    
// Set user's context
InBlock.gif
    wRequest.set_userContext("user's context");
InBlock.gif            
InBlock.gif    
// 添加完成请求事件
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);
InBlock.gif       
InBlock.gif      
InBlock.gif    
// 清楚请求结果
InBlock.gif
    displayElement.innerHTML = "";
InBlock.gif    
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
InBlock.gif       
ExpandedBlockEnd.gif}

         利用Sys.Net.WebRequest();执行POST请求的函数:

None.gif function PostWebRequest()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(postPage); 
InBlock.gif     
InBlock.gif    
// 设置请求方法.
InBlock.gif
    wRequest.set_httpVerb("POST");
InBlock.gif    
InBlock.gif    var body 
= "Message=Hello! Do you hear me?"
InBlock.gif    wRequest.set_body(body);
InBlock.gif    wRequest.get_headers()[
"Content-Length"= body.length;
InBlock.gif   
InBlock.gif     
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);
InBlock.gif       
InBlock.gif    
// 清楚请求结果
InBlock.gif
    displayElement.innerHTML = "";
InBlock.gif      
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
ExpandedBlockEnd.gif}

         WebRequest.js中最后完成的代码如下:

None.gif //  WebRequest.js
None.gif

None.gifvar getPage;
None.gifvar postPage;
None.gifvar displayElement;
None.gif
None.giffunction pageLoad()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    getPage 
= "getTarget.htm";
InBlock.gif    postPage 
= "postTarget.aspx";
InBlock.gif    displayElement 
= $get("ResultId");
ExpandedBlockEnd.gif}

None.gif
None.gif
//  利用GET方法执行请求。
None.gif
//  注意GET请求的参数包含在指定URL的查询参数中。
None.gif
function GetWebRequest()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    alert(
"Performing Get Web request.");
InBlock.gif    
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(getPage);  
InBlock.gif    
InBlock.gif    
// 设置请求方法.
InBlock.gif
    wRequest.set_httpVerb("GET");
InBlock.gif          
InBlock.gif    
// Set user's context
InBlock.gif
    wRequest.set_userContext("user's context");
InBlock.gif            
InBlock.gif    
// 添加完成请求事件
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);
InBlock.gif       
InBlock.gif      
InBlock.gif    
// 清楚请求结果
InBlock.gif
    displayElement.innerHTML = "";
InBlock.gif    
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
InBlock.gif       
ExpandedBlockEnd.gif}

None.gif
None.gif
//  这个函数展示了如何设置请求的内容
None.gif
// 函数向指定的URL执行一个POST请求,将请求信息上传到了服务器
None.gif
function PostWebRequest()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(postPage); 
InBlock.gif     
InBlock.gif    
// 设置请求方法.
InBlock.gif
    wRequest.set_httpVerb("POST");
InBlock.gif    
InBlock.gif    var body 
= "Message=Hello! Do you hear me?"
InBlock.gif    wRequest.set_body(body);
InBlock.gif    wRequest.get_headers()[
"Content-Length"= body.length;
InBlock.gif   
InBlock.gif     
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);
InBlock.gif       
InBlock.gif    
// 清楚请求结果
InBlock.gif
    displayElement.innerHTML = "";
InBlock.gif      
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
ExpandedBlockEnd.gif}

None.gif
None.gif
//  获取或设置请求完成事件
None.gif
function WebRequestCompleted()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif  
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(getPage);  
InBlock.gif           
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);   
InBlock.gif    alert(
"Added Web request completed handler");
InBlock.gif 
InBlock.gif    
// Remove the web request completed event handler.
InBlock.gif    
// Comment the following two lines if you want to
InBlock.gif    
// use the handler.
InBlock.gif
    wRequest.remove_completed(OnWebRequestCompleted); 
InBlock.gif    alert(
"Removed handler; the Web request return is not processed.");
InBlock.gif    
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
ExpandedBlockEnd.gif}

None.gif
None.gif
//  获取请求的URL
None.gif
function GetWebRequestResolvedUrl()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
// Instantiate the WebRequest.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(getPage);  
InBlock.gif           
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    var resUrl = wRequest.getResolvedUrl();   
InBlock.gif    alert(
"Resolved Url: " + resUrl);
InBlock.gif   
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted); 
InBlock.gif    
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
InBlock.gif  
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// 获取并设置请求的超时时间
None.gif
function WebRequestTimeout()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {    
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(getPage);  
InBlock.gif           
InBlock.gif    var defaultTimeout 
=  
InBlock.gif        wRequest.get_timeout();
InBlock.gif        
InBlock.gif    
// 设置请求超时时间为 100 毫秒.
InBlock.gif
    wRequest.set_timeout(100);
InBlock.gif    
InBlock.gif    var newTimeout 
= 
InBlock.gif        wRequest.get_timeout();
InBlock.gif    
InBlock.gif    alert(
"Default timeout: " + defaultTimeout);
InBlock.gif    alert(
"New timeout: " + newTimeout);
InBlock.gif     
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompleted);   
InBlock.gif    
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();     
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
// 获取并设置请求实例.
None.gif
function WebRequestExecutor()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {    
InBlock.gif    
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// Create the executor. In this case we just 
InBlock.gif    
// use the default executor. But, you can
InBlock.gif    
// create a custom one.
InBlock.gif
    var executor = new Sys.Net.XMLHttpExecutor();
InBlock.gif   
InBlock.gif    
// Set the executor.
InBlock.gif
    wRequest.set_executor(executor); 
InBlock.gif    
InBlock.gif    
// Get the current executor       
InBlock.gif
    var executor =  
InBlock.gif        wRequest.get_executor();
InBlock.gif        
InBlock.gif    alert(
"Response availabe: " + executor.get_responseAvailable())
ExpandedBlockEnd.gif}

None.gif
None.gif
//  获取并设置请求的头部
None.gif
 function WebRequestHeader() 
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif {
InBlock.gif       
// 实例化 WebRequest 对象.
InBlock.gif
    var wRequest =  new Sys.Net.WebRequest();
InBlock.gif    
InBlock.gif    
// 设置请求的 URL.  
InBlock.gif
    wRequest.set_url(postPage); 
InBlock.gif    
InBlock.gif    
// 设置请求方法.
InBlock.gif
    wRequest.set_httpVerb("POST");
InBlock.gif   
InBlock.gif    var body 
= "Message=Hello! Do you hear me?"
InBlock.gif    wRequest.set_body(body);
InBlock.gif    
InBlock.gif    
// Set the header's length.
InBlock.gif
    wRequest.get_headers()["Content-Length"= body.length;
InBlock.gif   
InBlock.gif    
// 添加完成请求事件.
InBlock.gif
    wRequest.add_completed(OnWebRequestCompletedHeader);
InBlock.gif       
InBlock.gif    
// 清楚请求结果
InBlock.gif
    displayElement.innerHTML = "";
InBlock.gif      
InBlock.gif    
// 执行请求
InBlock.gif
    wRequest.invoke();  
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
None.gif
//  请求完成的回掉函数
None.gif
function OnWebRequestCompleted(executor, eventArgs) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(executor.get_responseAvailable()) 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
InBlock.gif        
// Clear the previous results. 
InBlock.gif
        displayElement.innerHTML = "";
InBlock.gif   
InBlock.gif        
// Display Web request status.                  
InBlock.gif
        DisplayWebRequestStatus(executor);
InBlock.gif  
InBlock.gif        
// Display Web request headers.                  
InBlock.gif
        DisplayWebRequestHeaders(executor);
InBlock.gif        
InBlock.gif        
// Display Web request body.                  
InBlock.gif
        DisplayWebRequestBody(executor);
InBlock.gif    
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (executor.get_timedOut())
InBlock.gif            alert(
"Timed Out");
InBlock.gif        
else
InBlock.gif            
if (executor.get_aborted())
InBlock.gif                alert(
"Aborted");
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif
//  显示请求头部信息的回调函数
None.gif
function OnWebRequestCompletedHeader(executor, eventArgs) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(executor.get_responseAvailable()) 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
InBlock.gif        
// Clear the previous results. 
InBlock.gif
         displayElement.innerHTML = "";
InBlock.gif  
InBlock.gif        
// Display Web request headers.                  
InBlock.gif
        DisplayWebRequestHeaders(executor);
InBlock.gif        
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif    
InBlock.gif        
if (executor.get_timedOut())
InBlock.gif            alert(
"Timed Out");
InBlock.gif       
InBlock.gif        
else
InBlock.gif       
InBlock.gif            
if (executor.get_aborted())
InBlock.gif                alert(
"Aborted");
InBlock.gif       
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif 
None.gif
//  显示请求状态
None.gif
function DisplayWebRequestStatus(executor)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     displayElement.innerHTML 
+=
InBlock.gif     
"Status: [" + 
InBlock.gif     executor.get_statusCode() 
+ " " + 
InBlock.gif     executor.get_statusText() 
+ "]" + "<br/>"
ExpandedBlockEnd.gif}

None.gif
None.gif
//  显示请求的头部
None.gif
function DisplayWebRequestHeaders(executor)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    displayElement.innerHTML 
+= 
InBlock.gif        
"Headers: ";
InBlock.gif    displayElement.innerHTML 
+= 
InBlock.gif        executor.getAllResponseHeaders() 
+ "<br/>";
ExpandedBlockEnd.gif }

None.gif
None.gif
//  显示请求的主体
None.gif
function DisplayWebRequestBody(executor)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif     displayElement.innerHTML 
+= 
InBlock.gif        
"Body: ";
InBlock.gif    
if (document.all)
InBlock.gif         displayElement.innerText 
+= 
InBlock.gif            executor.get_responseData();
InBlock.gif    
else
InBlock.gif        
// Firefox
InBlock.gif
         displayElement.textContent += 
InBlock.gif            executor.get_responseData();
ExpandedBlockEnd.gif}

None.gif
None.gif    
None.giffunction DisplayInformation(message)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
// Clear the previous results.
InBlock.gif
     displayElement.innerHTML = "";
InBlock.gif    
// Display information.
InBlock.gif
    displayElement.innerHTML = "<br/>" + message;
ExpandedBlockEnd.gif}

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



         添加用以GET请求的页面getTarget.htm,代码如下:

<!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>
    <title>无标题页</title>
</head>
<body>
<p>
  
        希望在以后的日子里大家多提些宝贵的意见,我会经常为大家写一些文章,有不足之处请多多指点。
        ☆聊ゾ聊☆
   
     </p>

</body>
</html>
      
         添加用以POST方法请求的测试页面postTarget.aspx:

         

None.gif <% @ Page Language = " C# "  AutoEventWireup = " true "    %>
None.gif
None.gif
<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
None.gif
None.gif
< html xmlns = " http://www.w3.org/1999/xhtml "   >
None.gif
< head id = " Head1 "  runat = " server " >
None.gif    
< title > Post Target </ title >
None.gif    
None.gif    
< script language = " C# "  runat = " server " >
None.gif        
None.gif        
protected   void  Page_Load( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif             
if (HttpContext.Current.Request.Form["Message"!= null)
InBlock.gif                LabelID.Text 
= 
InBlock.gif                    HttpContext.Current.Request.Form[
"Message"].ToString();
ExpandedBlockEnd.gif        }

None.gif        
None.gif    
</ script >
None.gif
None.gif
</ head >
None.gif
< body >
None.gif    
< form id = " form1 "  runat = " server " >
None.gif    
< div >
None.gif        
< h1 > WebRequestPost Target </ h1 >
None.gif       
None.gif        
None.gif        
< p >
None.gif            
< asp:Textbox id = " LabelID "   Text = " test "  runat = " server " />
None.gif        
</ p >
None.gif        
None.gif         dot.gif Yes I hear you.
None.gif        
None.gif    
</ div >
None.gif    
</ form >
None.gif
</ body >
None.gif
</ html >
None.gif

         最后替换Default.aspx中的代码,用来测试我们的函数吧:

None.gif <% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Default.aspx.cs "  Inherits = " _Default "   %>
None.gif
<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
None.gif
None.gif
None.gif
< html xmlns = " http://www.w3.org/1999/xhtml "   >
None.gif    
< head id = " Head1 "  runat = " server " >
None.gif        
None.gif        
< title >  Using WebRequest  </ title >
None.gif       
None.gif        
< style type = " text/css " >
ExpandedBlockStart.gifContractedBlock.gif            body 
dot.gif {  font: 11pt Trebuchet MS;
InBlock.gif                    font
-color: #000000;
InBlock.gif                    padding
-top: 72px;
ExpandedBlockEnd.gif                    text
-align: center }

None.gif  
ExpandedBlockStart.gifContractedBlock.gif            .text 
dot.gif { font: 8pt Trebuchet MS }
None.gif        
</ style >
None.gif
None.gif   
</ head >
None.gif
None.gif   
< body >
None.gif     
None.gif    
< h2 > Using WebRequest </ h2 >
None.gif    
None.gif        
< form id = " form1 "  runat = " server " >
None.gif            
< asp:ScriptManager runat = " server "  ID = " ScriptManagerId " >
None.gif                
< Scripts >
None.gif                    
< asp:ScriptReference Path = " WebRequest.js "   />
None.gif                
</ Scripts >
None.gif            
</ asp:ScriptManager >
None.gif        
</ form >
None.gif     
None.gif        
< table >
None.gif            
< tr align = " left " >
None.gif                
< td > Make GET Request: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button1 "   
None.gif                        onclick
= " GetWebRequest() " > GET </ button >
None.gif                
</ td >
None.gif            
</ tr >
None.gif            
< tr align = " left " >   
None.gif                
< td > Request Body: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button2 "   
None.gif                        onclick
= " PostWebRequest() " > Body </ button >
None.gif                
</ td >
None.gif                
None.gif            
</ tr >
None.gif            
< tr align = " left " >
None.gif                
< td > Request Timeout: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button3 "   
None.gif                        onclick
= " WebRequestTimeout() " > Timeout </ button >
None.gif                
</ td >
None.gif            
</ tr >  
None.gif            
< tr align = " left " >
None.gif                
< td > Request Completed Handler: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button4 "   
None.gif                        onclick
= " WebRequestCompleted() " > Completed Handler </ button >
None.gif                
</ td >
None.gif            
</ tr >
None.gif            
None.gif            
< tr align = " left " >
None.gif                
< td > Resolved Url: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button5 "   
None.gif                        onclick
= " GetWebRequestResolvedUrl() " > Resolved Url </ button >
None.gif                
</ td >
None.gif                
None.gif            
</ tr >
None.gif            
None.gif            
< tr align = " left " >
None.gif                
< td > Request Executor: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button6 "   
None.gif                        onclick
= " WebRequestExecutor() " > Executor </ button >
None.gif                
</ td >
None.gif                
None.gif            
</ tr >
None.gif            
None.gif            
< tr align = " left " >
None.gif                
< td > Request Header: </ td >
None.gif                
< td >
None.gif                    
< button id = " Button7 "   
None.gif                        onclick
= " WebRequestHeader() " > Header </ button >
None.gif                
</ td >
None.gif                
None.gif            
</ tr >
None.gif            
None.gif        
</ table >
None.gif        
None.gif     
None.gif        
< hr  />
None.gif       
None.gif        
< div id = " ResultId "  style = " background-color:Aqua; " ></ div >
None.gif
None.gif
None.gif   
None.gif    
</ body >
None.gif    
None.gif
</ html >
None.gif

转载于:https://www.cnblogs.com/hblynn/archive/2007/01/30/634334.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值