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 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
javascript 强制刷新页面的实现代码
Dec 13 Javascript
用Juery网页选项卡实现代码
Jun 13 Javascript
web性能优化之javascript性能调优
Dec 28 Javascript
Javascript之this关键字深入解析
Nov 12 Javascript
js中switch case循环实例代码
Dec 30 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
jquery删除table当前行的实例代码
Oct 07 Javascript
jquery学习笔记之无new构建详解
Dec 07 jQuery
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 Javascript
vue中英文切换实例代码
Jan 21 Javascript
JavaScript 类的封装操作示例详解
May 16 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
angularJS开发注意事项
2018/05/26 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python微信撤回监测代码
2019/04/29 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
2014年学校领导班子对照检查材料
2014/09/19 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
学者《孟子》名人名言
2019/08/09 职场文书