jquery ajax,ashx,json的用法总结


Posted in Javascript onFebruary 12, 2014

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; 
            } 
        } 
    } 
}
Javascript 相关文章推荐
JavaScript按值删除数组元素的方法
Apr 24 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
使用jQuery卸载全部事件的思路详解
Apr 03 jQuery
echart简介_动力节点Java学院整理
Aug 11 Javascript
JavaScript实现换肤功能
Sep 15 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
Sep 18 Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 #Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 #Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 #Javascript
JavaScript cookie的设置获取删除详解
Feb 11 #Javascript
JavaScript新窗口与子窗口传值详解
Feb 11 #Javascript
jquery绑定事件不生效的解决方法
Feb 11 #Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 #Javascript
You might like
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
javascript Demo模态窗口
2009/12/06 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
python对DICOM图像的读取方法详解
2017/07/17 Python
Python探索之自定义实现线程池
2017/10/27 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
项目经理的岗位职责
2013/11/23 职场文书
优秀教师事迹简介
2014/02/02 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
高中教师评语大全
2014/04/25 职场文书
我的梦想演讲稿
2014/04/30 职场文书
慈善晚会策划方案
2014/05/14 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
贫困证明书范文
2015/06/16 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Ajax异步刷新功能及简单案例
2021/11/20 Javascript