封装了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 错误处理的几种方法
Jun 13 Javascript
jquery自动切换tabs选项卡的具体实现
Dec 24 Javascript
JavaScript实现对下拉列表值进行排序的方法
Jul 15 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
JavaScript requestAnimationFrame动画详解
Sep 14 Javascript
js插件实现图片滑动验证码
Sep 29 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
Sep 28 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
Apr 29 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 Javascript
使用Ajax实现进度条的绘制
Apr 07 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强制更新图片缓存的方法
2015/02/11 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
基于Javascript实现倒计时功能
2016/02/22 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python生成器的使用方法
2013/11/21 Python
Python入门篇之数字
2014/10/20 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
基于python 凸包问题的解决
2020/04/16 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
what is the difference between ext2 and ext3
2015/08/25 面试题
新闻专业个人自我评价
2013/09/21 职场文书
新学期班主任寄语
2014/01/18 职场文书
新学期开学演讲稿
2014/05/24 职场文书
IT工程师岗位职责
2014/07/04 职场文书
2015年领班工作总结
2015/04/29 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL
基于Python编写一个监控CPU的应用系统
2022/06/25 Python
Redis唯一ID生成器的实现
2022/07/07 Redis