zoukankan      html  css  js  c++  java
  • jquery ajax,ashx,json用法小结

    转自:http://www.hzbenet.com/html/kcjs/Java.Netkf/2402.html

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

  • 相关阅读:
    英语老师不想让你知道的一些网站分享
    最近三周开发的桌面应用系统
    UML技术沙龙PPT
    Pandas时间处理的一些小方法
    合并函数总结
    开博宣言
    DBGrid中增加一列CHECKBOX
    关于Delphi的Hint
    操作EXCEL
    关于FastReport
  • 原文地址:https://www.cnblogs.com/Rising/p/3013370.html
Copyright © 2011-2022 走看看