jquery提供的简化版的ajax调用方法通常如下: function post() { $("#divWait").show(); $("#btnPost").attr("disabled", "disabled"); $.post("../PostIt.ashx", { msgContent: $("#msgContent").val() }, function (data) { if (data.indexOf('OK') > -1) { alert(data); } else { } $("#divWait").hide(); $("#btnPost").attr("disabled", ""); }); } 在开发的时候,要接受json格式的返回值时,上面的方法貌似不能行,上面的方法貌似接受的是text的文本行。因此,采用jQuery的底层Ajax实现方法。 该方法参数也很多,具体可看帮助文档。本人的常规用法 function doPostAjax(){ $("#divWait").show(); $("#btnPost").attr("disabled", "disabled"); $.ajax({ url: '../PostIt.ashx', type: 'POST', dataType: 'json', data: { msgContent: $("#msgContent").val() }, timeout: 60000, error: function (XMLHttpRequest, textStatus, errorThrown) {//请求错误 时执行的方法 alert("error!" + errorThrown); $("#divWait").hide(); $("#btnPost").attr("disabled", ""); }, success: function (data, txtSataus) {//请求成功时执行的方法 showContent(data.content, data.createdate); $("#divWait").hide(); $("#btnPost").attr("disabled", ""); } }); } 在ashx代码段,要设置好返回的格式。 context.Response.ContentType = "application/json"; 如果是返回的html或者text的话可以如下写法 context.Response.ContentType = "text/plain"; 如果ajax方法中设置的返回值是json时,ashx代码返回的格式必须是json格式的数据。 把一个对象转换成json格式,常用方法就是采用开源的第三方类库json.net,Newtonsoft.Json.dll. JsonConvert.SerializeObject方法就可以转换了。返回json格式后,jquery就可以采用XXX.xxx的方式获取值了。 JsonConvert在处理datetime格式的时候,会返回类似1198908717056的绝对值,因此,在处理datetime的时候,要做一下转换。具体语句如下: IsoDateTimeConverter timeConverter = new IsoDateTimeConverter(); //这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式 timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter); 此处顺便提一下,javascript对json格式的数据有着天生的处理能力,非常好的兼容json格式数据。 举个例子: function pppp() { var person = { "name": "jack", "age": 24,"sex": true }; alert(person.name); alert(person.age); alert(person.sex); } 这样的代码可以直接写出来,在vs2010的代码编辑器中还可以有代码提示。很强大。 ashx完整代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Threading; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace nnn { /// <summary> /// PostIt 的摘要说明 /// </summary> public class PostIt : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; try { string msgContent = context.Request["msgContent"] ?? ""; ModelContent m = new ModelContent() { author = "", categoryid = -1, title = "", content = msgContent, datetime = DateTime.Now, key = "", createdate = DateTime.Now, lastmodifydate = DateTime.Now, ip = context.Request.UserHostAddress }; //BLLContent bll = new BLLContent(); //bll.Add(m); IsoDateTimeConverter timeConverter = new IsoDateTimeConverter(); //这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式 timeConverter.DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; string output = JsonConvert.SerializeObject(m, Newtonsoft.Json.Formatting.Indented, timeConverter); context.Response.Write(output); } catch (Exception ex) { context.Response.Write(ex.Message); } } public bool IsReusable { get { return false; } } } } 本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/695900 |