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 相关文章推荐
用JS实现一个页面多个css样式实现
May 29 Javascript
JavaScript中清空数组的三种方法分享
Apr 07 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
JavaScript中的style.cssText使用教程
Nov 06 Javascript
js读取csv文件并使用json显示出来
Jan 09 Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
通过实例讲解JS如何防抖动
Jun 15 Javascript
Vue插件之滑动验证码
Sep 21 Javascript
vue路由跳转传递参数的方式总结
May 10 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中取得文件的后缀名?
2012/02/20 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
javascript 动态添加表格行
2006/06/22 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
python中的for循环
2018/09/28 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python高级property属性用法实例分析
2019/11/19 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
林肯就职演讲稿
2014/05/19 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
python字符串常规操作大全
2021/05/02 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
python代码实现备忘录案例讲解
2021/07/26 Python