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实现的激活输入框后隐藏初始内容
Jun 29 Javascript
JavaScript常用全局属性与方法记录积累
Jul 03 Javascript
js实现图片旋转的三种方法
Apr 10 Javascript
JavaScript中的6种运算符总结
Oct 16 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
深入理解Node.js中的进程管理
Mar 13 Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
Vue仿支付宝支付功能
May 25 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 Javascript
React中获取数据的3种方法及优缺点
Feb 18 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
php 文章采集正则代码
2009/12/28 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
js中键盘事件实例简析
2015/01/10 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
JS实现多选框的操作
2020/06/24 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Atom的python插件和常用插件说明
2018/07/08 Python
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
邀请函怎么写
2015/01/30 职场文书
复兴之路展览观后感
2015/06/02 职场文书
解除合同协议书范本
2016/03/21 职场文书
自荐信范文
2019/05/20 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android
Python Pygame实战之塔防游戏的实现
2022/03/17 Python