对Jquery的Ajax进行二次封装,是为了统一请求调用入口,最好也同意响应格式。 此外,还额外增加了防止重复点击的功能,减少冗余代码量。
window.apwAjax = function(_this, param, succFunc, alwaysFunc, beforeSendFunc) { //防止重复点击 if(_this && 1 == _this.data('click')){ return; } if(_this){ _this.data('click', 1); } //默认 json格式返回 if (param['dataType'] == undefined) { param['dataType'] = 'json'; } // 默认发起POST请求 if (param['type'] == undefined) { param['type'] = 'POST'; } //请求前回调函数 param.beforeSend = function (xhr) { if (beforeSendFunc){ beforeSendFunc(xhr); } }; var request = $.ajax(param) .done(function (data, textStatus, jqXHR) { //统一处理逻辑 //认证失败,重新登录处理 if (401 == jqXHR.status) { location.href = '/login'; } //成功回调 if (succFunc){ succFunc(data, textStatus, jqXHR); } }).fail(function (jqXHR, textStatus, errorThrown) { if ("parsererror" == textStatus) { console.log("返回格式错误"); return; } console.log("服务器错误:" + errorThrown); }).always(function () { if (_this){ _this.data('click', 0); } // always回调 if (alwaysFunc){ alwaysFunc(); } }); // 返回 request,可以进行后续操作 request.abort() return request; }; //调用 apwAjax(null, {url:'/xxx'}, function(d){},null,null); //不防止重复点击 apwAjax($(this), {url:'/xxx'}, function(d){}); //防止重复点击
Jquery
的 Ajax
请求进行二次封装,是非常实用的功能,后面需要通用的逻辑修改时,只要修改 apwAjax
里面的逻辑就可以了。