封装了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 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
niceTitle 基于jquery的超链接提示插件
May 31 Javascript
Javascript 静态页面实现随机显示广告的办法
Nov 17 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
Bootstrap表单布局
Jul 19 Javascript
说说AngularJS中的$parse和$eval的用法
Sep 14 Javascript
JavaScript前端实现压缩图片功能
Mar 06 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 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在线生成ico文件的代码
2007/10/09 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
python的mysqldb安装步骤详解
2017/08/14 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Django单元测试工具test client使用详解
2019/08/02 Python
大学生军训自我评价分享
2013/11/09 职场文书
人事文员岗位职责
2014/02/16 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
志愿者活动总结报告
2014/06/27 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技