ASP.NET下使用Ajax

ASP.NET下使用Ajax

之前在认识Ajax初步理解中介绍了对Ajax的初步理解,本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的ScriptManager。

相关免费学习推荐:ajax(视频)

$.ajax向普通页面发送get请求

这是最简单的一种方式了,先简单了解jQuery ajax的语法,最常用的调用方式是这样:$.ajax({settings}); 有几个常用的setting,全部参数及其解释可以去jQuery官方API文档查询

1. type:请求方式 get/post

2. url:请求的Uri

3. async:请求是否为异步

4. headers:自定义的header参数

5. data:发往服务器的参数

6. dataType:参数格式,常见的有string、json、xml等

7. contents:决定怎样解析response的一个”字符串/正则表达式” map

8. contentType:发送到服务器的额数据的内容编码类型,它的默认值是”application/x-www-form-urlencoded; charset=UTF-8″”。

9. success:请求成功后调用的句柄

10.error:请求失败后调用的句柄

没使用过jQuery的ajax话这样看有些云里雾里的感觉,来看一个简单例子

首先使用Visual Studio新建一个WebApplication,把jQuery.js引入project,然后添加两个页面,Default.aspx作为测试用

Default.aspx

nbsp;html >    Ajax                html, body, form        {            width: 100%;            height: 100%;            padding: 0px;            margin: 0px;        }                #container        {            margin: 100px;            height: 300px;            width: 500px;            background-color: #eee;            border: dached 1px #0e0;        }        

登录后复制

NormalPage.aspx作为请求页面,先不做任何处理。在Default.aspx页面中的JavaScript中可以看到testGet函数就利用jQuery的ajax向Normal.aspx发送了了一个get请求,没写的参数使用jQuery默认参数,这个调用没使用任何参数,简单向Normal.aspx页面发送请求,请求成功则alert全部response(即success方法参数:result,jQuery会把responseText传入success方法第一个参数),请求失败则向p中添加一行错误提示文本。如果一切正常,可以看到页面弹出对话框,对话框内内容即是Normal.aspx页面内容

image

一个简单的get请求完成了,这样的结果一般没有多大用处,也不是ajax意图所在,使用Ajax主要是想使用JavaScript可以异步向服务器发送特定请求,获取服务器相关数据,比如向服务器询问天气,然后获得天气数据,更新页面,而不是获取整个页面,换句话说,使用Ajax本身就是为了摆脱更新整个页面来更新页面数据这种模式,仅仅需要服务器给我们数据即可,这就需要调用服务器端的特定方法。

$.ajax GET请求调用服务器特定方法

我们这时候需要修改NormalPage.aspx,为其添加几个方法供Default.aspx测试调用

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Web{    public partial class NormalPage : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            string action = Request.QueryString["action"];            Response.Clear(); //清除所有之前生成的Response内容            if (!string.IsNullOrEmpty(action))            {                switch (action)                {                    case "getTime":                        Response.Write(GetTime());                        break;                    case "getDate":                        Response.Write(GetDate());                        break;                }            }            Response.End(); //停止Response后续写入动作,保证Response内只有我们写入内容        }        private string GetDate()        {            return DateTime.Now.ToShortDateString();        }        private string GetTime()         {            return DateTime.Now.ToShortTimeString();        }    }}

登录后复制

然后为Default.aspx添加一个新的方法,并修改button的onclick方法为新写的函数

function testGet2() {            $.ajax({                type: 'get',                url: 'NormalPage.aspx',                async: true,                data:{action:'getTime'},                success: function (result) {                    setContainer(result);                },                error: function () {                    setContainer('ERROR!');                }            });        }

登录后复制

testGet2函数是在testGet函数的基础上做了些许修改,首先对success方法做了更改,把得到的response写到页面;然后对请求添加了data参数,请求向服务器发送了一个action:getTime的键值对,在get请求中jQuery会把此参数转为url的参数,上面写法和这种写法效果一样

function testGet3() {            $.ajax({                type: 'get',                url: 'NormalPage.aspx?action=getTime',                async: true,                success: function (result) {                    setContainer(result);                },                error: function () {                    setContainer('ERROR!');                }            });        }

登录后复制

看一下执行效果,这是Chrome的监视结果

image

如果调试我们发现这个请求调用的服务器页面NormalPage.aspx的GETime方法,并且response中只包含对有用的数据,如果把请求中参数的值改为getDate,那么就会调用对应GetDate方法。

$.ajax POST与json

这样向一个页面发送请求然后在Load事件处理程序中根据参数调用不同方法,清除Response,写入Response,终止Response,而且传入的参数局限性太大,好业余的赶脚,看看专业些解决方法。为project添加一个General Handler类型文件,关于HttpHandler相关内容本文不做详细解释,只需知道它可以非常轻量级的处理HTTP请求,不用走繁琐的页面生命周期处理各种非必需数据。

Handler.ashx.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;using Newtonsoft.Json;namespace Web{    ///     /// Summary description for Handler    ///     public class Handler : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            Student stu = new Student();            int Id = Convert.ToInt32(context.Request.Form["ID"]);            if (Id == 1)            {                stu.Name = "Byron";            }            else            {                stu.Name = "Frank";            }           string stuJsonString= JsonConvert.SerializeObject(stu);           context.Response.Write(stuJsonString);        }        public bool IsReusable        {            get            {                return false;            }        }    }}

登录后复制

关于这个类语法本文不做详细说明,每次发起HTTP请求ProcessRequest方法都会被调用到,Post类型请求参数和一再Request对象的Form中取得,每次根据参数ID值返回对应json对象字符串,为了展示json格式数据交互,需要为项目引入json.net这一开源类库处理对象序列化反序列化问题,然后创建一个Student类文件

Student.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Web{    public class Student    {        public int ID { get; set; }        public string Name { get; set; }    }}

登录后复制

看看页面如何处理

function testPost() {            $.ajax({                type: 'post',                url: 'Handler.ashx',                async: true,                data: { ID: '1' },                success: function (result) {                    setContainer(result);                    var stu =eval ('('+result+')');                    setContainer(stu.ID);                    setContainer(stu.Name);                },                error: function () {                    setContainer('ERROR!');                }            });        }

登录后复制

结果是这个样子的

image

上面代码向Handler.ashx发送一Post请求,比且带有参数{ID:’1’},可以看到结果,如果用调试工具可以发现,得到的result是一个json格式的字符串,也就是往Response写的对象序列化后的结果。这样就实现了比较专业些的方式调用Ajax,但是有一个问题依旧存在,HttpHandler会自动调用ProcessRequest方法,但是也只能调用该方法,如果想调用不同方法只能像普通页面那样传递一个参数表明调用哪个方法,或者写不同的Handler文件。

WebService与ScriptManager

微软向来很贴心,看看微软怎么处理上面的困惑,那就是利用WebService,WebService配合SCriptManager有客户端调用的能力,在项目中添加一个Webservice文件

WebService.asmx

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;namespace Web{    ///     /// Summary description for WebService    ///     [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.     [System.Web.Script.Services.ScriptService]    public class WebService : System.Web.Services.WebService    {        [WebMethod]        public Student GetStudent(int  ID)        {            if (ID == 1)            {                return new Student() { ID = 1, Name = "Byron" };            }            else            {                return new Student() { ID = 2, Name = "Frank" };            }        }

登录后复制

  [WebMethod]           public string GetDateTime(bool isLong)              {                    if (isLong)                     {                          return DateTime.Now.ToLongDateString();                       }                            else                               {                                      return DateTime.Now.ToShortDateString();                           }                                        }    }        }

登录后复制

代码中加黄的code默认是被注释掉的,要想让客户端调用需要把注释去掉,Service中定义了两个方法,写个测试方法让客户端调用第一个方法根据参数返回对应对象,首先需要在页面from内加上ScriptManager,引用刚才写的WebService文件

Default.aspx


登录后复制

以上就是ASP.NET下使用Ajax的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2725325.html

(0)
上一篇 2025年3月7日 23:22:22
下一篇 2025年2月24日 07:14:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • jquery和ajax是什么?

    Ajax是指一种创建交互式网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术;而jquery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果。…

    2025年3月7日
    200
  • 详解ajax实现excel报表导出

    推荐(免费):ajax视频教程 利用ajax实现excel报表导出【解决乱码问题】,供大家参考,具体内容如下 背景 项目中遇到一个场景,要导出一个excel报表。由于需要token验证,所以不能用a标签;由于页面复杂,所以不能使用表单提交。…

    2025年3月7日
    200
  • jQuery JavaScript ajax区别是什么

    jQuery JavaScript ajax区别:1、javaScript广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能;2、AJAX创建交互式网页应用的网页开发技术;3、jQuery方便地为网站提供AJAX交互。 j…

    2025年3月7日
    200
  • 如何解决jquery ajax乱码问题

    jquery ajax乱码的解决办法就是在文件头部加上编码说明“header(“Content-type:text/html;charset:gbk”);”即可。 推荐:《jquery视频教程》 本教程操作环境:wi…

    2025年3月7日
    200
  • jquery与ajax的区别是什么

    jquery与ajax的区别:1、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新;2、jQuery是一个库,它对JS进行了封装,使其更方便使用。 该方法适用于所有品牌电脑 jqu…

    2025年3月7日
    200
  • 实现springmvc结合ajax批量新增的方法

    ajax视频教程栏目主要介绍了springmvc结合ajax批量新增的实现方法 推荐(免费):ajax视频教程 1.需要注意的问题 mvc框架的处理日期问题@ResponseBody响应对象是自定义对象,响应不是json@ResopnseB…

    2025年3月7日 编程技术
    200
  • jquery和ajax的区别是什么

    jquery和ajax的区别:1、Ajax是一种异步请求技术,而jQuery对Ajax进行了封装,更方便我们使用;2、Ajax是一门技术,它提供了异步更新的机制,而jQuery是一个库,它对JS进行了封装。 AJAX AJAX即“Async…

    2025年3月7日
    200
  • ajax与jquery的区别是什么

    区别:jQuery是一个javascript封装的代码库,里面是封装了经常用的一些函数,属于javascript的范畴;而ajax是xmlhttprequest、js、xml三种技术的集合,属于技术范畴。 本教程操作环境:windows7系…

    2025年3月7日
    200
  • 详解springmvc 结合ajax批量新增的实现方法

    ajax视频教程栏目介绍ajax批量新增的方法 推荐(免费):ajax视频教程 1.需要注意的问题 mvc框架的处理日期问题@ResponseBody响应对象是自定义对象,响应不是json@ResopnseBody响应自定义对象时,日期为是…

    2025年3月7日 编程技术
    200
  • 介绍Spring中ajax与后台传输数据的几种方式

    ajax栏目介绍与后台传输数据的方法 推荐(免费):ajax 最近写ajax与后台传输数据的时候碰到了一个问题,我想ajax以json的方式把数据传输个后台,后台用map的形式接收,然后也以map的形式传回数据。可是一直碰到前台报(*)(@…

    2025年3月7日
    200

发表回复

登录后才能评论