Всем привет!
Говорю сразу - мне пофиг нужна ли она кому-то или нет, я писал ее для себя
Кому нужно - тот возьмет
Я прошу вас проветить КАЧЕСТВО КОДА и исправить вожможные проблемы
(function() {
'use strict';
var fast_ajax, xhr, setheader;
fast_ajax = function(opt) {
// Стандартные настройки
opt.url !== undefined ? opt.url = opt.url : opt.type = location.href;
opt.type !== undefined ? opt.type = opt.type.toUpperCase() : opt.type = 'GET';
opt.data = typeof opt.data === 'object' ? opt.data : null;
opt.timeout = typeof opt.timeout === 'number' ? opt.timeout : 0;
opt.async = opt.async !== false ? true : false;
// Настройки-Колбеки
opt.ontimeout = typeof opt.ontimeout === 'function' ? opt.ontimeout : function(data) { alert(data) };
opt.success = typeof opt.success === 'function' ? opt.success : function(data) { alert(data) };
opt.onerror = typeof opt.onerror === 'function' ? opt.onerror : function(data) { alert(data) };
xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
// Хедеры которые ставятся
setheader = function() {
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('AJAX-Engine', 'Fast-AJAX');
};
// В зависимости от запроса подставляем opt.data в get параметры (page.php?_param=data), или POST
switch (opt.type) {
case 'GET':
xhr.open('GET', opt.url + "?" + fast_ajax.toQueryString(opt.data), opt.async);
setheader();
xhr.send(null);
break;
default:
xhr.open(opt.type, opt.url, opt.async);
setheader();
xhr.send(fast_ajax.toQueryString(opt.data));
};
// если все хорошо =)
xhr.onreadystatechange = function() {
if(xhr.readyState != 4) return;
if (xhr.status >= 200 && xhr.status < 400) {
opt.success(xhr.responseText);
} else {
console.error( 'ERROR: ' + (xhr.status ? xhr.statusText : 'the request fails') );
return;
};
};
// ошибка =(
xhr.onerror = function(e) {
opt.onerror(e);
};
};
// здесь будут хранится все доп. методы, PS: сокращение pl = plugin
fast_ajax.pl = fast_ajax.prototype = {};
// превращение такого {_ajax: 'kosbeg', param: 'data'} в такое _ajax=kosbeger¶m=data
fast_ajax.toQueryString = fast_ajax.pl.toQueryString = function(data) {
var query = '', i,
push = function (key, value) {
query += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';
}, key, value;
for (key in data) {
if (!Object.hasOwnProperty.call(data, key)) {
continue;
}
value = data[key];
if ((typeof (data) === "object") && (data instanceof Array)) {
for (i = 0; i < value.length; i++) {
push(key, value[i]);
};
} else {
push(key, data[key]);
};
};
return query.replace(/&$/, '').replace(/%20/g, '+');
};
// кросраузерный парсинг JSON, по возможности используется нативный
fast_ajax.parseJSON = fast_ajax.pl.parseJSON = function(data) {
if (typeof (data) !== "string" || !data || data === '') {
return null;
}
data = data.replace(/^\s+/, '');
data = data.replace(/\s+$/, '');
if (window.JSON && window.JSON.parse) {
return window.JSON.parse(data);
}
var checkChars = /^[\],:{}\s]*$/,
checkEscape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
checkTokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
checkBraces = /(?:^|:|,)(?:\s*\[)+/g;
if (checkChars.test(data.replace(checkEscape, "@").replace(checkTokens, "]").replace(checkBraces, ""))) {
return (new Function( "return " + data ))();
}
};
// выносим переменную за границы замыкания
window.fast_ajax = window.$a = fast_ajax;
})();
// запрос на Fast-AJAX
$a({
url: 'ajax.php',
type: 'pOsT',
data: {_ajax: 'kosbeg', param: 'data'},
success: function(data){
data = $a.parseJSON(data);
document.querySelector('#content_pure').innerHTML = data.page;
}
});
// запрос на jQuery
$.ajax({
url: 'ajax.php',
type: 'pOsT',
data: {_ajax: 'kosbeg', param: 'data'},
success: function(data){
data = $.parseJSON(data);
$("#content_jq").text(data.page);
}
});
PS: это только заготовка кода =)
Я сюда еще добавлю кросдоменный аякс, кеширование при помощи Mozilla LocalForage, и нормальный таймаут 8)