;(function ($) {
AJAX = {
_default_option: {
url: "",
data: "",
async:true,
dataType: "json",
cache: false,
success: null,//function(){}
error: null,//function(){}
send: null,//function(){}
complete: null//function(){}
},
ajaxDefaultSuccess:function(){
},
ajaxDefaultError:function(){
},
ajaxByUrl: function (option) {
var options = $.extend({},this._default_option, option);
this._ajaxSend(options);
$.ajax({
url: options.url,
type:options.type,
async:options.async,
dataType: "json",
data: options.data,
cache: false,
})
.done(function(data) {
if(data.code == 'noLogin'){
layer.open({
type: 2,
title: false,
area: ['399px', '530px'],
shadeClose: true,
content: [eval(data.url), 'no']
});
return;
}
if ($.isFunction(options.success)) {
options.success(data);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
})
.fail(function() {
LXD_AJAX.ajaxDefaultError();
})
this._ajaxComplete(options);
return false;
},
_ajaxSend: function(option){
$(document).ajaxSend(function(){
if ($.isFunction(option.send)) {
option.send();
}
});
},
_ajaxComplete: function(option){
$(document).ajaxComplete(function(){
if ($.isFunction(option.complete)) {
option.complete();
}
});
},
postByUrl: function (option) {
var options = $.extend({},{type: "POST"}, this._default_option, option);
this._ajaxSend(options);
$.post(options.url, options.data, function (data) {
if(data.code == -2){
$('#login-wrap').show();
$('#login-prompt').show();
return;
}
if ($.isFunction(options.success)) {
options.success(data);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
}, options.dataType);
this._ajaxComplete(options);
},
getByUrl: function (option) {
var options = $.extend({},{type: "GET"}, this._default_option, option);
this._ajaxSend(options);
$.get(options.url, options.data, function (data) {
if(data.code == -2){
//window.location.href = data.url;
$('#login-wrap').show();
$('#login-prompt').show();
return;
}
if ($.isFunction(options.success)) {
options.success(data);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
}, options.dataType);
this._ajaxComplete(options);
},
delByUrl: function (option) {
var options = $.extend({},{type: "DELETE"}, this._default_option, option);
this._ajaxSend(options);
$.ajax({
url: options.url,
type: 'DELETE',
dataType: 'json',
data:options.data,
})
.done(function(data) {
if(data.code == -2){
$('#login-wrap').show();
$('#login-prompt').show();
return;
}
if ($.isFunction(options.success)) {
options.success(data);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
})
.fail(function() {
LXD_AJAX.ajaxDefaultError();
})
this._ajaxComplete(options);
},
putByUrl: function (option) {
var options = $.extend({},{type: "PUT"}, this._default_option, option);
this._ajaxSend(options);
$.ajax({
url: options.url,
type: 'PUT',
dataType: 'json',
data:options.data,
})
.done(function(data) {
if(data.code == -2){
$('#login-wrap').show();
$('#login-prompt').show();
return;
}
if ($.isFunction(options.success)) {
options.success(data);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
})
.fail(function() {
LXD_AJAX.ajaxDefaultError();
})
this._ajaxComplete(options);
},
ajaxByForm: function (form, callback) {
var $form = $(form);
// if (!($form.valid())) {
// return false;
// }
$.ajax({
type: $form.method || "POST",
url: $form.attr("action"),
data: $form.serialize(),
dataType: "json",
cache: false,
})
.done(function(response) {
// var json = $.LXD.jsonEval(response);
if(response.code == -2){
//window.location.href = json.url;
$('#login-wrap').show();
$('#login-prompt').show();
return;
}
if ($.isFunction(callback)) {
callback(response);
} else {
LXD_AJAX.ajaxDefaultSuccess();
}
})
.fail(function() {
LXD_AJAX.ajaxDefaultError();
})
}
}
})(jQuery);
原生ajax封裝
/*
* ajax({
* url: 'test.php', // 請(qǐng)求地址
* jsonp: 'jsonpCallback', // 采用jsonp請(qǐng)求画恰,且回調(diào)函數(shù)名為"jsonpCallbak"允扇,可以設(shè)置為合法的字符串
* data: {'b': '異步請(qǐng)求'}, // 傳輸數(shù)據(jù)
* success:function(res){ // 請(qǐng)求成功的回調(diào)函數(shù)
* console.log(res);
* },
* error: function(error) {} // 請(qǐng)求失敗的回調(diào)函數(shù)
* });
*
*/
function ajax(params) {
params = params || {};
params.data = params.data || {};
var json = params.jsonp ? jsonp(params) : json(params);
// ajax請(qǐng)求
function json(params) {
params.type = (params.type || 'GET').toUpperCase();
params.data = formatParams(params.data);
var xhr = null;
// 實(shí)例化XMLHttpRequest對(duì)象
if(window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
// IE6及其以下版本
xhr = new ActiveXObjcet('Microsoft.XMLHTTP');
};
// 監(jiān)聽事件
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
var status = xhr.status;
if(status >= 200 && status < 300) {
var response = '';
var type = xhr.getResponseHeader('Content-type');
if(type.indexOf('xml') !== -1 && xhr.responseXML) {
response = xhr.responseXML; //Document對(duì)象響應(yīng)
} else if(type === 'application/json') {
response = JSON.parse(xhr.responseText); //JSON響應(yīng)
} else {
response = xhr.responseText; //字符串響應(yīng)
};
params.success && params.success(response);
} else {
params.error && params.error(status);
}
}
};
// 連接和傳輸數(shù)據(jù)
if(params.type == 'GET') {
xhr.open(params.type, params.url + '?' + params.data, true);
xhr.send(null);
} else {
xhr.open(params.type, params.url, true);
//設(shè)置提交時(shí)的內(nèi)容類型
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.send(params.data);
}
}
// jsonp請(qǐng)求
function jsonp(params) {
//創(chuàng)建script標(biāo)簽并加入到頁面中
var callbackName = params.jsonp;
var head = document.getElementsByTagName('head')[0];
// 設(shè)置傳遞給后臺(tái)的回調(diào)參數(shù)名
params.data['callback'] = callbackName;
var data = formatParams(params.data);
var script = document.createElement('script');
head.appendChild(script);
//創(chuàng)建jsonp回調(diào)函數(shù)
window[callbackName] = function(json) {
head.removeChild(script);
clearTimeout(script.timer);
window[callbackName] = null;
params.success && params.success(json);
};
//發(fā)送請(qǐng)求
script.src = params.url + '?' + data;
//超時(shí)處理
if(params.time) {
script.timer = setTimeout(function() {
window[callbackName] = null;
head.removeChild(script);
params.error && params.error({
message: '超時(shí)'
});
}, time);
}
};
//格式化參數(shù)
function formatParams(data) {
var arr = [];
for(var name in data) {
arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
};
// 添加一個(gè)隨機(jī)數(shù)读处,防止緩存
arr.push('v=' + random());
return arr.join('&');
}
// 獲取隨機(jī)數(shù)
function random() {
return Math.floor(Math.random() * 10000 + 500);
}
}