XMLHttpRequest+WebForm模式(接口IHttpHandler)实现ajax

 

首先引入ajax.js文件 创建xmlhttpRequest对象

ContractedBlock.gifExpandedBlockStart.gifCode
//创建XMLHttpRequest对象
var xmlHttp;
function newXMLHttpRequest() {

    
if (window.XMLHttpRequest) {
        xmlHttp 
= new XMLHttpRequest();
    } 
else if (window.ActiveXObject) {
        
try { 
            xmlHttp 
= new ActiveXObject("Msxml2.XMLHTTP");
        } 
catch (e1) { 
            
try {
                xmlHttp 
= new ActiveXObject("Microsoft.XMLHTTP");
            } 
catch (e2) {
            } 
        }
     }
       
return xmlHttp;


//发起异步请求
function sendRequest(){
    newXMLHttpRequest();
    
var url="AjaxHandler.ashx?name="+document.getElementById("txtName").value;
      xmlHttp.open(
"GET",url,true);
    xmlHttp.onreadystatechange
=onSuccessCallBack;
    xmlHttp.send(
null);
}

//回调处理函数
function onSuccessCallBack(){
    
if (xmlHttp.readyState == 4
    {
        
if (xmlHttp.status == 200
        {
            document.getElementById(
"result").innerHTML = xmlHttp.responseText;
        } 
        
else 
        {
            document.getElementById(
"result").innerHTML=result.status;
        }
    }
}


//HTTP 处理程序
   IHttpHandler 接口:定义 ASP.NET 为使用自定义 HTTP 处理程序同步处理 HTTP Web 请求而实现的协定。
如果您的处理程序将访问会话状态值,它必须实现 IRequiresSessionState 接口(不包含任何方法的标记接口)。 
创建自定义 HTTP 处理程序

若要创建自定义 HTTP 处理程序,请创建实现 IHttpHandler 接口的类来创建一个同步处理程序。或者,可以实现 IHttpAsyncHandler 来创建一个异步处理程序。两种处理程序接口都要求您实现 IsReusable 属性和 ProcessRequest 方法。 IsReusable 属性指定 IHttpHandlerFactory 对象(实际调用适当处理程序的对象)是否可以将处理程序放置在池中,并且重新使用它以提高性能。如果处理程序不能放在池中,则在每次需要处理程序时工厂都必须创建处理程序的新实例。

ProcessRequest 方法负责处理单个 HTTP 请求。在此方法中,将编写生成处理程序输出的代码。

HTTP 处理程序有权访问应用程序上下文。其中包括请求用户的标识(如果已知)、应用程序状态和会话信息。当请求 HTTP 处理程序时,ASP.NET 将调用相应处理程序的 ProcessRequest 方法。您在处理程序的 ProcessRequest 方法中编写的代码将创建一个响应,此响应随后发送回请求浏览器。

ContractedBlock.gifExpandedBlockStart.gifCode
using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;


namespace Ajax
{
    
/// <summary>
    
/// $codebehindclassname$ 的摘要说明
    
/// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    
public class AjaxHandler : IHttpHandler
    {

        
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType 
= "text/plain";//显示html原代码.
            
//response.ContentType ="image/gif" 
            
//response.ContentType ="image/jpeg" 
            
//response.ContentType ="text/html" 
            string name = context.Request.QueryString["name"];
            context.Response.Write(name.ToUpper());
        }

        
public bool IsReusable
        {
            
get
            {
                
return false;
            }
        }
    }
}

前台页面:

 

ContractedBlock.gifExpandedBlockStart.gifCode
<head runat="server">
    
<title>XMLHttpRequest+WebForm模式</title>
    
<script type="text/javascript" src="Ajax.js"></script>
</head>
<body>
<input type="text" id="txtName" />
<input type="button" value="Request" onclick="JavaScript:sendRequest();" />
<hr />
<div id="result"></div>
</body>
</html>

或者通过客户端向另一个页面传递参数,由该页面处理数据,把结果输出到http流中 
 apsx.cs页面
   public partial class AjaxForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string name = Request.QueryString["name"];
                Response.Write(name.ToUpper());
                Response.Flush();
                Response.End();
            }
        }
    }

//xmlhttpRequest对象
   //发起异步请求
function sendRequest(){
    newXMLHttpRequest();
    var url="AjaxForm.aspx?name="+document.getElementById("txtName").value;
   xmlHttp.open("GET",url,true);
    xmlHttp.onreadystatechange=onSuccessCallBack;
    xmlHttp.send(null);
}

转载于:https://www.cnblogs.com/hubcarl/archive/2009/09/15/1567251.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVA----10082 WERTYU【字符串】

WERTYU UVA - 10082 题目传送门 题目大意&#xff1a;按照所给的键盘样式&#xff0c;以及错误的字符串&#xff0c;输出正确的字符串&#xff0c;其输入的每一个字符都按照键盘样式向右错移了一位。 解决方法&#xff1a;将整个键盘用数组存起来&#xff0c;遍历一遍即可。…

关于C生成的汇编与C++生成的汇编在函数名称上的差异

最近用到ucos&#xff0c;这个RTOS本身是用C语言和部分汇编编写&#xff0c;而自己又打算用C来写应用&#xff0c;在其中遇到几个问题&#xff0c;一番折腾之后&#xff0c;让我更加深刻认识到了在一些一般不注意的细节上&#xff0c;C与C的不同。 1、对于ucos&#xff0c;虽…

UVA401 ​​​​​​​Palindromes【字符串】

Palindromes UVA - 401 题目传送门 题目大意&#xff1a;给你一个字符串&#xff0c;判断其是回文串还是镜像串。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #…

IIS 5 与IIS 6 原理介绍

[ 转] ASP.NET Process Model之一&#xff1a;IIS 和 ASP.NET ISAPI 前几天有一个朋友在MSN上问我“ASP.NET 从最初的接收到Http request到最终生成Response的整个流程到底是怎样的&#xff1f;”我觉得这个问题涉及到IIS和ASP.NETASP.NET Runtime的处理模型的问题&#xff0c;…

UVA340 ​​​​​​​Master-Mind Hints【数组】

Master-Mind Hints UVA - 340 题目传送门 题目大意&#xff1a;先输入一个整数n&#xff0c;表示有n个数字&#xff0c;下面第一行代表正确答案&#xff0c;其下每一行代表用户猜的答案&#xff0c;需统计其有多少数字位置正确&#xff08;A&#xff09;&#xff0c;有多少数…

教你如何把自己从好友的QQ中删除

在QQ中&#xff0c;有些人看了不太顺眼&#xff0c;真不知当初为何让他加自己为好友的&#xff01; 那有什么办法&#xff0c;可以把自己从对方的QQ中删除呢&#xff1f; 其实&#xff0c;用QQ就可以轻松搞定&#xff01; 让我来为你支一招吧&#xff01; 打开QQ&#xff0…

UVA1583 Digit Generator

Digit Generator UVA - 1583 题目传送门 题目大意&#xff1a;若x的各位数之和加上x本身等于y&#xff0c;则证明x是y的生成元&#xff0c;求输入数字n的最小生成元。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> …

C++内存详解

伟大的Bill Gates 曾经失言&#xff1a; 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序&#xff0c;往往提心吊胆。如果不想触雷&#xff0c;唯一的解决办法就是发现所有潜伏的地雷并且排除它们&#xff0c;躲是躲不了的。本文的内…

UVA1584 ​​​​​​​Circular Sequence【字符串】

Circular Sequence UVA - 1584 题目传送门 题目大意&#xff1a;输入一个环形字符串&#xff0c;需输出其最小字典序的形式的字符串。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #includ…

UVA1585 Score

Score UVA - 1585 题目传送门 题目大意&#xff1a;输入一个字符串&#xff0c;O的分数为1&#xff0c;若出现连续的O&#xff0c;如OOOO...&#xff0c;分数为1,2,3,4...&#xff0c;X为0分&#xff0c;求最终的分数 AC代码&#xff1a; #include <cstdio> #includ…

operater int()

class Number { int number; public: explicit Number(int n){number n;} operator int() //注意一定不能声明返回值 { return number; } }; int main () { Number n1 Number(100); int n2 n1; cout << n2 << endl; re…

UVA1586 ​​​​​​​ Molar mass

Molar mass UVA - 1586 题目传送门 题目大意&#xff1a;给你一个只包含C,H,O,N分子式&#xff0c;其中C,H,O,N的原子量分别为&#xff1a;12.01,1.008,16.00,14.01&#xff0c;求其分子量 AC代码&#xff1a; #include <cstdio> #include <iostream> #includ…

SharePoint v3:忘掉模拟用户Impersonate,SPSecurity.RunWithElevatedPrivileges来了

回顾&#xff1a; 在SharePoint V2 大家应该都用过模拟用户Impersonate这个功能&#xff0c; 这个功能用来暂时提升某个用户的权限&#xff0c;比如某个普通用户的本来不能修改某个列表的值&#xff0c;但是我们功能需要在修改。 缺点&#xff1a; 我们使用这个模拟用户功能…

UVA1225 ​​​​​​​Digit Counting

Digit Counting UVA - 1225 题目传送门 题目大意&#xff1a;输入一个数字T&#xff0c;代表有T组测试数据&#xff0c;下面每行有一个整数n&#xff0c;求将1到n的数字连成一串后每个数字出现的个数。 AC代码&#xff1a; #include <cstdio> #include <iostream&…

Chess Queen【数学】

Chess Queen UVA - 11538 题目传送门 题目大意&#xff1a;输入两个整数n,m&#xff0c;在n行m列的棋盘中放入白黑两个棋子&#xff0c;棋子在同一行、同一列或同一对角线上能相互进攻&#xff0c;问有多少种摆放方案。 AC代码&#xff1a; #include <cstdio> #incl…

Java开发中保证接口的幂等性问题

目录 1、解决方案 2、使用token保证接口幂等性的例子 3、在实际项目中&#xff0c;如何有效地使用token法来保证接口的幂等性&#xff1f; 4、3示例中如何获取请求中的 token 5、如果token验证失败&#xff0c;如何处理 6、在上述示例代码中加上token过期后重置的功能 7…

typedef 的四个用途和两大陷阱

>>>>>用途一&#xff1a;定义一种类型的别名&#xff0c;而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如&#xff1a;char* pa, pb; // 这多数不符合我们的意图&#xff0c;它只声明了一个指向字符变量的指针&#xff0c; // 和一个字符变量&am…

Triangle Counting【数学】

Triangle Counting UVA - 11401 题目传送门 题目大意&#xff1a;输入一个整数n&#xff0c;求在1到n中选取三条边能够组成多少种三角形。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #in…

Cheerleaders【容斥】

Cheerleaders UVA - 11806 题目传送门 题目大意&#xff1a;给你三个整数n,m,k&#xff0c;代表有一个n行m列的场地&#xff0c;共有k个人&#xff0c;需保证在最外围的一圈的每行每列都必须要有一个人&#xff0c;若这个人在对角上&#xff0c;则可以当做他所在的行列都已经…

Exploring Pyramids【动态规划——区间DP】

Exploring Pyramids UVALive - 3516 题目传送门 题目大意&#xff1a;给你一个字符串&#xff0c;其代表的是机器人来回走过的路径&#xff0c;机器人总是先走左边再走右边&#xff0c;问有多少种情况。 解决方法&#xff1a;设输入序列为S&#xff0c;d(i,j)为子序列Si,Si…