封装了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 相关文章推荐
javascript中的float运算精度实例分析
Aug 21 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
JavaScript基本编码模式小结
May 23 Javascript
判定是否原生方法的JS代码
Nov 12 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
小程序实现新用户判断并跳转激活的方法
May 20 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
Sep 10 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 jQuery
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
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以及MYSQL日期比较方法
2012/11/29 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
php blowfish加密解密算法
2016/07/02 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
python基础 range的用法解析
2019/08/23 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
关于倡议书的范文
2015/04/29 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
上诉状格式
2015/05/23 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
php双向队列实例讲解
2021/11/17 PHP
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS