jquery ajax,ashx,json的用法总结

  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;

  }

  }

  }

  }