封装了jQuery的Ajax请求全局配置


Posted in Javascript onFebruary 05, 2015

摘要:

jQuery已经成为项目中最常见的js库,也是前端开发最喜欢使用的库。下面是在项目中封装了jQuery的Ajax,分享给大家。

代码:

// ajax 请求参数

var ajaxSettings = function(opt) {

    var url = opt.url;

    var href = location.href;

    // 判断是否跨域请求

    var requestType = 'jsonp';

    if (url.indexOf(location.host) > -1)

        requestType = 'json';

    requestType = opt.dataType || requestType;

    // 是否异步请求

    var async = (opt.async === undefined ? true : opt.async);

    return {

        url: url,

        async: async,

        type: opt.type || 'get',

        dataType: requestType,

        cache: false,

        data: opt.data,

        success: function(data, textStatus, xhr) {

            /*

            *如果dataType是json,怎判断返回数据是否为json格式,如果不是进行转换

            * 成功数据通用格式

            *   {

            *       "code": 200,

            *       "data": [], 

            *       "success": true // 成功

            *   }

            *   失败返回的数据

            *   {

            *       "code": 200, 

            *       "info": 'error', 

            *       "success": false // 失败

            *   }

             */

            if((requestType === 'json' || requestType === "jsonp") && typeof(data) === "string") {

                data = JSON.parse(data);

            }

            if(data.success) {

                opt.success(data);

            }
            if(opt.error) {

                opt.error(data);

            }
        },

        error: function(xhr, status, handler) {

            if (opt.error)

                opt.error();

        }

    };

};

function unescapeEntity(str) {

    var reg = /&(?:nbsp|#160|lt|#60|gt|62|amp|#38|quot|#34|cent|#162|pound|#163|yen|#165|euro|#8364|sect|#167|copy|#169|reg|#174|trade|#8482|times|#215|divide|#247);/g,

        entity = {

        ' '   : ' ',

        ' '   : ' ',

        '<'     : '<',

        '<'    : '<',

        '>'     : '>',

        '&62;'     : '>',

        '&'    : '&',

        '&'    : '&',

        '"'   : '"',

        '"'    : '"',

        '¢'   : '¢',

        '¢'   : '¢',

        '£'  : '£',

        '£'   : '£',

        '¥'    : '¥',

        '¥'   : '¥',

        '€'   : '?',

        '€'  : '?',

        '§'   : '§',

        '§'   : '§',

        '©'   : '©',

        '©'   : '©',

        '®'    : '®',

        '®'   : '®',

        '™'  : '™',

        '™'  : '™',

        '×'  : '×',

        '×'   : '×',

        '÷' : '÷',

        '÷'   : '÷'

    };

    if (str === null) {

        return '';

    }

    str = str.toString();

    return str.indexOf(';') < 0 ? str : str.replace(reg, function(chars) {

        return entity[chars];

    });

}

// 转换html的实体

$.ajaxSetup({

    global     : true,

    cache      : false,

    converters : {

        'text json' : function(response){

            return jQuery.parseJSON(unescapeEntity(response));

        }

    }

});

/*

*Ajax 请求权限异常

*   用户权限错误跳转登陆页

*   404错误跳转404页面

 */

$(document).ajaxComplete(function(evt, req, settings){

    if(req && req.responseJSON){

        var json = req.responseJSON;

        if(json.code === 403 && json.info === 'perm error' && !json.success){

            window.location.href = location.protocol + '//' + location.hostname;

            return;

        }

        if(json.code === 404 && !json.success) {

            window.location.href = location.protocol + '//' + location.hostname + '/404.html';

        }

    }

});

/*

*Ajax 请求错误提示

*例如:500错误

*返回错误信息格式

*{

*   code: 500,

*   info: 系统发生异常

*}

 */

$(document).ajaxError(function(evt, req, settings){

    if(req && (req.status === 200||req.status === 0)){ return false; }

    var msg = '错误:';

    if(req && req.responseJSON){

        var json = req.responseJSON;

        msg += json.code||'';

        msg += json.info||'系统异常,请重试';

    }else{

        msg = '系统异常,请重试';

    }

    alert(msg);

});

小结:

在执行Ajax请求时只需要调用ajaxSettings函数即可,如下:

$.ajax(ajaxSettings({

    url: '',

    data: ''

}))

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js循环改变div颜色具体方法
Jun 25 Javascript
JS简单实现文件上传实例代码(无需插件)
Nov 15 Javascript
JS函数重载的解决方案
May 13 Javascript
Javascript基础教程之变量
Jan 18 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 Javascript
angularjs实现简单的购物车功能
Sep 21 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 Javascript
Vue页面骨架屏的实现方法
May 22 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
JS对象属性的检测与获取操作实例分析
Mar 17 Javascript
浅谈webpack构建工具配置和常用插件总结
May 11 Javascript
js 数组当前行添加数据方法详解
Jul 28 Javascript
node.js集成百度UE编辑器
Feb 05 #Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 #Javascript
JavaScript计时器示例分析
Feb 05 #Javascript
编写自己的jQuery提示框(Tip)插件
Feb 05 #Javascript
使用pjax实现无刷新更改页面url
Feb 05 #Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 #Javascript
jquery手风琴特效插件
Feb 04 #Javascript
You might like
PHP源代码数组统计count分析
2011/08/02 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Js中sort()方法的用法
2006/11/04 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python中的随机函数小结
2018/01/27 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
pygame实现打字游戏
2021/02/19 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
应聘医药代表职位求职信
2013/10/21 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2015年团支书工作总结
2015/04/03 职场文书
家长通知书家长意见
2015/06/03 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
如何使用flask将模型部署为服务
2021/05/13 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
排查Tomcat进程假死的问题
2022/05/06 Servers