您的位置:首页 > Web前端 > JQuery

jquery ajax,ashx,json的用法总结

2016-05-11 14:05 447 查看
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; 

            } 

        } 

    } 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: