封装了jQuery的Ajax请求全局配置
摘要:
jQuery已经成为项目中最常见的js库,也是前端开发最喜欢使用的库。下面是在项目中封装了jQuery的Ajax,分享给大家。
代码:
//ajax请求参数
varajaxSettings=function(opt){
varurl=opt.url;
varhref=location.href;
//判断是否跨域请求
varrequestType='jsonp';
if(url.indexOf(location.host)>-1)
requestType='json';
requestType=opt.dataType||requestType;
//是否异步请求
varasync=(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(); } }; }; functionunescapeEntity(str){ varreg=/&(?: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(); returnstr.indexOf(';')<0?str:str.replace(reg,function(chars){ returnentity[chars]; }); } //转换html的实体 $.ajaxSetup({ global :true, cache :false, converters:{ 'textjson':function(response){ returnjQuery.parseJSON(unescapeEntity(response)); } } }); /* *Ajax请求权限异常 * 用户权限错误跳转登陆页 * 404错误跳转404页面 */ $(document).ajaxComplete(function(evt,req,settings){ if(req&&req.responseJSON){ varjson=req.responseJSON; if(json.code===403&&json.info==='permerror'&&!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)){returnfalse;} varmsg='错误:'; if(req&&req.responseJSON){ varjson=req.responseJSON; msg+=json.code||''; msg+=json.info||'系统异常,请重试'; }else{ msg='系统异常,请重试'; } alert(msg); });