Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2015, 14:14
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от KosBeg
Я прошу вас проветить КАЧЕСТВО КОДА
Мои глаза

Сообщение от KosBeg
быстрая библа для аякса
чем быстрая то?)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2015, 14:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от KosBeg
type: 'pOsT',
это специально для
Сообщение от KosBeg
opt.type.toUpperCase()
?
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2015, 14:15
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

fetch api
__________________
kobezzza
code monkey
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2015, 14:16
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от kobezzza
fetch api
чё ты делаешь? Это кульминация была, до которой можно было 2-3 страницы срача написать
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2015, 14:18
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от nerv_
чем быстрая то?)
не спрашивай, главное что на чистом JS, а не на jQuery
Сообщение от nerv_
Мои глаза
Мои тоже
Сообщение от рони
type: 'pOsT',
это специально для
opt.type.toUpperCase()
да! просто бывает что я пишу 'post' вместо 'POST'...
Сообщение от kobezzza
fetch api
мне не нрава!..
jQuery.AJAX API самое то для меня
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2015, 14:20
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Так, ребята, у Вас сразу шутки(как всегда )
А у меня конкретный вопрос
Ответить с цитированием
  #8 (permalink)  
Старый 18.06.2015, 14:23
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от KosBeg
jQuery.AJAX API самое то для меня
знаешь ли ты что, твой код не реализует jQuery.AJAX API?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #9 (permalink)  
Старый 18.06.2015, 14:26
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от nerv_
знаешь ли ты что, твой код не реализует jQuery.AJAX API?
а я и не знал
в jQuery.AJAX API есть Deferred/Promise
я в курсе, но для меня это самое то!
Вопрос - как его еще улучшить?)

Последний раз редактировалось KosBeg, 18.06.2015 в 14:28.
Ответить с цитированием
  #10 (permalink)  
Старый 18.06.2015, 14:31
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от KosBeg
Вопрос - как его еше улучшить?)
еще? разве
Сообщение от nerv_ Посмотреть сообщение
Мои глаза
не достаточно?)

Научи json отправлять
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
AJAX для ЧАЙНИКОВ (вопросы) sc2r2bey AJAX и COMET 16 10.07.2009 21:23
Использование Ajax для динамического обновления содержимого Rifmasta AJAX и COMET 0 10.07.2009 15:39