封装了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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
关于javascript中的typeof和instanceof介绍
Dec 04 Javascript
Javascript中valueOf与toString区别浅析
Mar 19 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 Javascript
JS模拟键盘打字效果的方法
Aug 05 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
Vue.js组件通信的几种姿势
Oct 23 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
vue3.0搭配.net core实现文件上传组件
Oct 29 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
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
JS正则中的RegExp对象对象
2012/11/07 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
Node.js简单入门前传
2017/08/21 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
高一自我鉴定
2013/12/17 职场文书
京剧自荐信
2014/01/26 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
在校实习生求职信
2014/06/18 职场文书
体育课外活动总结
2014/07/08 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
本溪关门山导游词
2015/02/09 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
合同纠纷调解书
2015/05/20 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python