zl程序教程

您现在的位置是:首页 >  前端

当前栏目

jqueryajax,ashx,json的用法总结

JSONJSON 用法 总结 JqueryAJAX ashx
2023-06-13 09:15:17 时间

jquery提供的简化版的ajax调用方法通常如下:

复制代码代码如下:

   functionpost(){
   $("#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实现方法。

该方法参数也很多,具体可看帮助文档。本人的常规用法

复制代码代码如下:

   functiondoPostAjax(){
           $("#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的时候,要做一下转换。具体语句如下:

IsoDateTimeConvertertimeConverter=newIsoDateTimeConverter();          
//这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式           
timeConverter.DateTimeFormat="yyyy"-"MM"-"dd""HH":"mm":"ss";
stringoutput=JsonConvert.SerializeObject(m,Newtonsoft.Json.Formatting.Indented,timeConverter);

此处顺便提一下,javascript对json格式的数据有着天生的处理能力,非常好的兼容json格式数据。

举个例子:

复制代码代码如下:
   functionpppp(){
          varperson={"name":"jack","age":24,"sex":true};
          alert(person.name);
          alert(person.age);
          alert(person.sex);
          }

这样的代码可以直接写出来,在vs2010的代码编辑器中还可以有代码提示。很强大。

ashx完整代码如下:

复制代码代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Threading;
usingNewtonsoft.Json;
usingNewtonsoft.Json.Converters;

   namespacennn
{
   ///<summary>
   ///PostIt的摘要说明
   ///</summary>
   publicclassPostIt:IHttpHandler
   {

           publicvoidProcessRequest(HttpContextcontext)
       {
           context.Response.ContentType="application/json";
           try
           {
               stringmsgContent=context.Request["msgContent"]??"";
               ModelContentm=newModelContent()
               {
                   author="",
                   categoryid=-1,
                   title="",
                   content=msgContent,
                   datetime=DateTime.Now,
                   key="",
                   createdate=DateTime.Now,
                   lastmodifydate=DateTime.Now,
                   ip=context.Request.UserHostAddress

                   };

                   //BLLContentbll=newBLLContent();
               //bll.Add(m);

                   IsoDateTimeConvertertimeConverter=newIsoDateTimeConverter();         
               //这里使用自定义日期格式,如果不使用的话,默认是ISO8601格式          
               timeConverter.DateTimeFormat="yyyy"-"MM"-"dd""HH":"mm":"ss";
               stringoutput=JsonConvert.SerializeObject(m,Newtonsoft.Json.Formatting.Indented,timeConverter);
               context.Response.Write(output);
           }
           catch(Exceptionex)
           {
               context.Response.Write(ex.Message);
           }

           }

           publicboolIsReusable
       {
           get
           {
               returnfalse;
           }
       }
   }
}