封装了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操作二级联动实现代码
Jul 27 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
Oct 05 Javascript
如何制作幻灯片(代码分享)
Jan 06 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
Feb 10 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
vue地区选择组件教程详解
May 04 Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 Javascript
JS删除对象中某一属性案例详解
Sep 08 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
php session_decode函数用法讲解
2019/05/26 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
javascript date格式化示例
2013/09/25 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
临床医学大学生求职信
2013/09/28 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
外贸专业求职信
2014/03/09 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
同学毕业留言寄语
2015/02/27 职场文书
教导处教学工作总结
2015/08/12 职场文书
个人工作决心书
2015/09/22 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
springboot如何初始化执行sql语句
2021/06/22 Java/Android