封装了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实现动态菜单添加的实例代码
Jul 05 Javascript
JS判断客户端是手机还是PC的2个代码
Apr 12 Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 Javascript
windows下vue-cli导入bootstrap样式
Apr 25 Javascript
微信小程序 跳转传递数据的实例
Jul 06 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
Layui表格监听行单双击事件讲解
Nov 14 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
keras slice layer 层实现方式
2020/06/11 Python
Python多线程的退出控制实现
2020/08/10 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
高一物理教学反思
2014/01/24 职场文书
新任教师自我鉴定
2014/02/24 职场文书
房屋授权委托书范本
2014/10/07 职场文书
教师读书笔记
2015/06/29 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
Android studio 简单计算器的编写
2022/05/20 Java/Android