封装了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 Object的extend是一个常用的功能
Dec 02 Javascript
js 省地市级联选择
Feb 07 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
jQuery取消特定的click事件
Feb 29 Javascript
jQuery判断checkbox选中状态
May 12 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
Jul 09 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 Javascript
详解vue中v-for的key唯一性
May 15 Vue.js
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
咖啡知识大全
2021/03/03 新手入门
php header Content-Type类型小结
2011/07/03 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python获取当前时间的方法
2014/01/14 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Django添加sitemap的方法示例
2018/08/06 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
学校三八妇女节活动情况总结
2014/03/09 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
道歉信怎么写
2015/05/12 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
python开发实时可视化仪表盘的示例
2021/05/07 Python
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS