.net中使用Ajax
来源:互联网 发布:ps软件的使用方法 编辑:程序博客网 时间:2024/05/27 19:27
在.net中使用Ajax传递数据的话,一般使用ashx或asmx作为后台的处理文件,那么这2种文件在使用时有何区别呢。
1.使用ashx处理
用ashx时,在后台取参数时一般都是使用HttpContext.Request.Param["参数名"]来获取参数的,如果想多个ajax调用同一个ashx的话,可以在参数里加上比如optype的值来表示该调用哪个方法。
前端方法
<script language="javascript" type="text/javascript">$(document).ready(function () {$.ajax({url: "ashxtest1.ashx",type: "post",/*注意这里是json对象,ajax会将其转换成optype=add的格式,这样在后台就可以使用context.Request.Params["optype"]获取值了。如果这里是一个字符串的话那么后台需要使用context.Request.Params[0]来获取值,不方便使用,最好还是传入json对象便于后台获取传入的参数。如果需要传入较复杂的参数的话,可以这样data: { "optype": "add","param":Json.stringfy({"name":"wang","year":26}) }后台获取到param后可以使用反序列话插件将字符串转换为对象比如LitJson或Newtonsoft*/data: { "optype": "add", "param": JSON.stringify({ "name": "wang", "year": 26 }) },/*这个设置是告诉ajax在获取到返回值,将返回值转化成什么格式,如果转换失败则会进入error*/dataType: "json",/*contentType代表使用什么格式将数据从前端发送到服务器,比如text/plain,text/html,text/xml,text/javascript,application/jsoncontentType不设置,Ajax默认会用application/x-www-form-urlencoded,适合大多数使用情况了对于上面常用的5种方式,这种data格式都没有问题,所以可以设置也可以不设置*/contentType: "application/json; charset=utf-8",success: function (returnData) {alert('success');},error: function (e, r, t) {//error的话这里会有3个参数传进来alert('error');},complete: function () {//不管是访问成功或失败都会调用此方法}});});</script>后台方法
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace AjaxAshx.Test{ /// <summary> /// ashxtest1 的摘要说明 /// </summary> public class ashxtest1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string strOpType=""; //ajax中如果data为json对象可以这样获取到参数 if (context.Request.Params["optype"] != null) { strOpType = context.Request.Params["optype"].ToString(); } //ajax中如果data为字符串的话需要通过index获取参数,不方便使用 strOpType = context.Request.Params[0].ToString(); //返回这个的话,由于ajax的dataType=json,所以会在返回值后转换失败,进入error方法 //context.Response.Write("helloworld"); //这个返回值可以正确的转换为json,进入success方法 context.Response.Write("{\"word\":\"helloworld\"}"); context.Response.Flush(); } /// <summary> /// 这个是必须的 /// </summary> public bool IsReusable { get { return false; } } }}
根据前面的分析使用ashx的好处是,前台传递参数使用json,后台可以比较方便的获取参数;基本不需要考虑contentType的影响;后台返回的值就是前台的得到的值。
2.使用asmx处理
前台方法
<script language="javascript" type="text/javascript">$(document).ready(function () {$.ajax({/*使用asmx需要在url后面直接指定访问后台的哪个方法*/url: "asmxtest1.asmx/HelloWorld",type: "post",/*用asmx的话这里对data的格式就会有要求了,.net内部机制不是很清楚,应该是根据contentType会对data进行一个验证,验证不通过的会调用失败,下面列举了常用的几种类型1.contentType不设置:这时会默认使用application/x-www-form-urlencoded,这个时候data需要为一个json对象,对象中的key值需要与后台方法中传入参数一致,可以多但是不能少。<span style="color:#ff0000;">这种情况下后台返回值会是xml格式,使用时注意dataType的设置</span>。2.contentType=text/xml,data需要为一个正确格式的xml字符串3.contentType=application/json,data需要为一个代表json格式的字符串而不是一个json对象,比如'{"param":1}'或者'{"param":"{\\"name\\":\\"aa\\"}"}'这种复杂格式注意里面需要双斜杠。<span style="color:#ff0000;">这种情况后台返回值为json格式,会将返回的值放在一个d的对象里面</span>*/data: '{"param":"{\\"name\\":\\"aa\\"}"}',//data: { param: JSON.stringify({ "name": "aa" }) },dataType: "json",contentType: "application/json; charset=utf-8",success: function (returnData) {alert('success');},error: function (e, r, t) {//error的话这里会有3个参数传进来alert('error');},complete: function () {//不管是访问成功或失败都会调用此方法}});});</script>后台方法
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;namespace AjaxAshx.Test{ /// <summary> /// asmxtest1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 //这里一定注意要去掉注释 [System.Web.Script.Services.ScriptService] public class asmxtest1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld(string param) { return "{\"flag\":1}"; } }}
使用asmx的话需要特别注意contentType的设置,还有对返回值的处理。综合比较,如果没有特殊要求一定要用asmx的话,使用ashx会比较简单点。
0 0
- .net中使用Ajax
- ajax.dll .net中简单使用ajax
- Ajax.net中使用PopupControlExtender
- ASP.NET中使用Ajax
- .net中使用Ajax做到局部刷新
- 在.NET中结合AJAX使用JSON
- 在PHP中使用ASP.NET AJAX
- 在Asp.net中使用AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- 在PHP中使用ASP.NET AJAX
- Boost安装
- Fizz Buzz programming
- 如果你想学好编程!就一定要看这个!对无论有多厉害的你有很多帮助!
- ActivityManager: Warning: Activity not started, its current task has been brought to the front
- 现场清理sqlserver2008数据库日志语句备份
- .net中使用Ajax
- projecteuler---->problem=27----Quadratic primes
- 演讲大厅安排
- hdu1205 吃糖果(鸽笼原理)
- STL基本用法总结
- canvas块状擦除,擦掉上面图片,漏出下面
- hdu 4961 Boring Sum
- mac 显示桌面快捷键
- UVA 282 - Rename(字符串处理)