封装了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 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
javascript preload&amp;lazy load
May 13 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
jquery清空textarea等输入框实现代码
Apr 22 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
详解JavaScript for循环中发送AJAX请求问题
Jun 23 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
微信小程序 新建登录页并实现tabBar隐藏
Jun 13 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+dbfile开发小型留言本
2006/10/09 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
js实现简单商品筛选功能
2021/02/02 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python群发邮件实例代码
2014/01/03 Python
python正则表达式match和search用法实例
2015/03/26 Python
Python多线程爬虫简单示例
2016/03/04 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL