Показать сообщение отдельно
  #1 (permalink)  
Старый 18.06.2015, 13:43
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Fast-AJAX - быстрая библа для аякса
Всем привет!
Говорю сразу - мне пофиг нужна ли она кому-то или нет, я писал ее для себя
Кому нужно - тот возьмет
Я прошу вас проветить КАЧЕСТВО КОДА и исправить вожможные проблемы
(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&param=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)

Последний раз редактировалось KosBeg, 18.06.2015 в 13:45.
Ответить с цитированием