甩掉 ashx/asmx,使用jQuery.ajaxWebService请求WebMethod,Ajax处理更加简练

在WebForm下 开发ajax程序,需要借助于一般处理程序(*.ashx)或web服务(*.asmx),并且每一个ajax请求,都要建一个这样的文件,如此一来,如果在一个项目中ajax程序多了,势必会产生一堆的.ashx或.asmx,虽然于程序本身无碍,但那一堆文件看上去总觉得有伤大雅。那么可不可以丢掉这些.ashx和.asmx,选择一种更简练的方式来做ajax程序呢。
答案是肯定的,那就是:WebMethod 。
  首先在aspx.cs文件里建一个公开的静态方法,然后加上WebMethod属性。
  如:

[WebMethod]
 public static string GetUserName() 
 {
 //......
 }

  如果要在这个方法里操作session,那还得将WebMethod的EnableSession 属性设为true 。即:

[WebMethod(EnableSession = true)]//或[WebMethod(true)]
 public static string GetUserName() 
 {
 //......
 }

 然后我们就写ajax程序来访问这个程序,我们就用jQuery吧。

$.ajax({
        type: "POST",
        contentType: "application/json",
        url: "WebForm2.aspx/GetUserName",
        data: "{}",
        dataType: "json",
        success: function(){.......}
    });

  这里对几个参数做一下简单的说明,
  type:请求的类型,这里必须用post 。WebMethod方法只接受post类型的请求。
  contentType:发送信息至服务器时内容编码类型。我们这里一定要用application/json 。
  url:请求的服务器端处理程序的路径,格式为"文件名(含后缀)/方法名"
  data:参数列表。注意,这里的参数一定要是json格式的字符串,记住是字符串格式,如:"{aa:11,bb:22,cc:33 , ...}"。如果你写的不是字符串,那jquery会把它实序列化成字符串,那么在服务器端接受到的就不是json格式了,且不能为空,即使没有参数也要写成"{}",如上例。
很多人不成功,原因就在这里。
  dataType:服务器返回的数据类型。必须是json,其他的都无效。因为webservice 是一json格式返回数据的,其形式为:{"d":"......."}。
  success:请求成功后的回调函数。你可以在这里对返回的数据做任意处理。

  我们可以看到其中一些参数值是固定的,所以从复用性的角度考虑,我们可以给jquery做一个扩展,对上面的函数做一下简单的封装:
我们建一个脚本文件叫 jquery.extend.js。在里面写一个叫ajaxWebService的方法(因为webmethod其实就是WebService嘛,故此方法对请求*.asmx也是有效的),代码如下:

///    <summary>
///    jQuery原型扩展,重新封装Ajax请求WebServeice
///    </summary>
///    <param name="url" type="String">
///     处理请求的地址
///</param>
///    <param name="dataMap" type="String">
///     参数,json格式的字符串
///</param>
///    <param name="fnSuccess" type="Function">
///     请求成功后的回调函数
///</param>
$.ajaxWebService = function(url, dataMap, fnSuccess) {
    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: url,
        data: dataMap,
        dataType: "json",
        success: fnSuccess
    });
}

  好了,这样我们请求webmethod方法 就可以这样写了:

$.ajaxWebService("WebForm2.aspx/GetUserName", "{}", function(result) {......});

  最后:如果你的项目中ajax程序非常多(这种情况是可能存在的,我做过一个网站,是个sns,全程ajax,几乎每个操作都用了ajax),
 你觉得把WebMethod方法写在各个aspx页面里很零散,那么你可以专门建一个页面(如:WebMethods.aspx)来存放。

原文地址:https://www.cnblogs.com/asdyzh/p/9819971.html

时间: 2024-10-04 23:20:46

甩掉 ashx/asmx,使用jQuery.ajaxWebService请求WebMethod,Ajax处理更加简练的相关文章

jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法

1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是"application/json", (3)data传递的数据必须是严格的json数据,如"{'a':'aa','b':'bb'}",而且参数必须和静态方法的参数一 一对应 (4)aspx的后台方法返回的数据默认形式是"{'d':'返回的内容'}",所

jQuery异步请求模拟IE登录网站

具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 2 3 <!DOCTYPE html PUBLIC &qu

jQuery异步请求(如getJSON)跨域解决方案

相信大家在使用jQuery异步请求非自己网站内相对资源(通过别人站点上的URL直接读取)使经常会遇到如下错误吧,实际上这些错误都是浏览器安全机制“搞的鬼”,才让我们开发路上遇到了拦路虎. 当你直接在浏览器中请求:“http://www.weather.com.cn/adat/sk/101110101.html”时会得到你需要的json数据. 当你通过jQuery的getJSON方法读取时你就会得到下列错误. Chrome提示错误: XMLHttpRequest cannot load http:

jquery jsonp请求错误处理

jQuery将ajax方法进行了封装,jsonp可以轻松实现跨域请求. $.ajax({type: 'GET', url: "<%= SysUtils::TASK_CENTER_URL %>/all_tasks_h/verbose", async: false, dataType: "jsonp", jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)

Android简单封装类似JQuery异步请求

在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作,会有溢出的问题,(当然一般情况不会有那么多线程同时工作的)所以写了这个代码,还望高手指正! [Java]代码 01 package com.xbl.task; 02 03 import java.io.BufferedReader; 04 import java.io.InputStream; 0

ExtJS以及JQuery异步请求Session过期解决方案

最近在开发中遇到这样的问题,当Session过期后,通过拦截器判断过期并通过response.sendRedirect(request.getServletContext()+"/login.jsp")重定位到登录界面,但是因为大部分前后台的交互是通过Ajax进行的异步请求,这种做法只能是该请求没有任何的实际相应,但是不能重定位到登录界面. 然后就想能不能对异步请求,在其返回的时候进行统一的前端拦截,判断如果responseText符合{timeout: true, redirectU

通过jQuery或ScriptManager以Ajax方式访问服务

1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服务对外公开,调用也方便,更加专业些.如果不是要公开的接口,handler完全可以胜任了.下面是将webservice发布的效果. 客户端在调用服务端的服务时,最简单的莫过于使用jQuery了.当然微软也提供了ScriptMananger来访问WebService.他们之间的关系可以用下图说明. 2.

JQuery(三) Ajax相关

JQuery大大简化了Ajax通用操作,开发者只需要指定请求URL,回调函数即可. 三个主要方法: $().param(obj):将obj参数(对象或数组)转化成查询字符串. {name:"疯狂Java讲义", price:109}转换出的查询字符串为:name=%E7%96%AF%E7%8B%82Java%E8%AE%B2%E4%B9%89&price=109 serialize():将表单或表单控件转化成查询字符串. user=vince&desc=%E4%BB%8

jQuery:自学笔记(5)——Ajax

jQuery:自学笔记(5)--Ajax 使用Ajax快捷函数 说明 出于简化AJAX开发工作的流程,jQuery提供了若干了快捷函数. 实例 1.显示 test.php 返回值(HTML 或 XML,取决于返回值). $.get("test.php", function(data){   alert("Data Loaded: " + data); }); 2.向页面 test.php 发送数据,并输出结果(HTML 或 XML,取决于所返回的内容): $.pos