jqueryajaxjsonashx实用技巧

    xiaoxiao2021-03-25  124

    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;              }          }      }  }

    转载请注明原文地址: https://ju.6miu.com/read-8006.html

    最新回复(0)