Главная > Программинг > Изобретая велосипеды: AJAX

Изобретая велосипеды: AJAX

короче, суть в том, что нужно мне было сделать штуку, чтобы удобно было делать запросы через ajax и не менее удобно обрабатывать ответы от них.

так вот, если раньше я таскал за собой или дикий кусок js, изменять который было сложно или некий фреймворк типа jQuery, то теперь я сделал простенький объект, который делает всю грязную работ,. а мне остается только передать параментры и функцию обработки, и поскольку я не жадный, то нате:

if (typeof jsAjax == "undefined" || !jsAjax) {
  var jsAjax = {};
}

jsAjax.ajax = typeof jsAjax.ajax != 'undefined' && jsAjax.ajax ? jsAjax.ajax : function(o) {
  var url = (typeof o === 'string') ? o : o.url;
  var callback = (typeof o.callback === 'undefined') ? function() {} : o.callback;
  var method = (typeof o.method === 'undefined') ? 'GET' : o.method;
  var type = (typeof o.type === 'undefined') ? 'text' : o.type;

  var len = (typeof o.vars === 'undefined') ? 0 : o.vars.length;
  var str="";
  for(var i = 0;i < len;i++)
  {
    if(i!='0')
    {
      str=str+'&';
    }
    str=str+o.vars[i].name+'='+escape(o.vars[i].value);
  }

  var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

  var onCompleteRequest = function () {
    if (xhr.readyState == 4)
    {
      if (xhr.status == 200)
      {

        if (type == "text") {
          r=xhr.responseText;
        } else if (type=="json") {
           r=eval('('+xhr.responseText+')');
        } else if (type=="xml") {
          r=xhr.responseXML.documentElement;
        } else {
          r=xhr.responseText;
        }
        callback(r);
      }
    }
  };

  xhr.open(method, url, true);
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.setRequestHeader('Accept-Language', 'en');
  xhr.setRequestHeader('Accept-Charset', 'utf-8');
  xhr.onreadystatechange=onCompleteRequest;
  xhr.send(str);

};

Пользоваться безумно просто, чтоб было более менее понятно, несколько примеров:

jsAjax.ajax("http://example.com/");

jsAjax.ajax({url:"http://example.com/",vars:[{name:"x",value:"y"},{name:"y",value:"x"}],method:"POST",callback:function() {alert(r);}});

jsAjax.ajax({url:"http://example.com/",vars:[{name:"x",value:"y"},{name:"y",value:"x"}],method:"POST",type:"json",callback:someFunction});

теперь по поводу параметров:

можно передать просто текст, тогда он будет считаться адресом и сделает тупой GET запрос, а можно поступить умнее и заполнить структурку состоящюю из следующих полей

url – адрес который запрашиваем
vars – список параметров запроса в виде:

[{name:"someName",value:"someValue"},{name:"someOtherName",value:"someOtherValue"}]

method – метод запроса (GET или POST)
type – тип ответа передаваемый в функцию обработки (text,json,xml)
callback – функция обработки ответа (ответ в соответствии с типом как видно из кода передается одной переменной)

вообщем вызов с полным списком переменных будет выглядеть примерно так:

jsAjax.ajax({
url:"http://somedome.com/somepage.php",
vars:[{name:"someName",value:"someValue"},{name:"someOtherName",value:"someOtherValue"}],
method: "POST",
type: "text",
callback: function (answer) { alert(answer); }
});

вот вообщем и все. :)
P.S. вот ссылочка на файл исходника.

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

  1. 16 Апрель 2009 в 14:41 | #1

    редко – потому что некогда :)
    посты будут, я много пишу на js, но не все достойно опубликования :)

  2. 17 Апрель 2009 в 08:39 | #2

    Ложь, пиздешь и провокация, сайт нормально в опере отображаеццо :)

  3. BepныЙИзмeнниK
    21 Июнь 2009 в 22:57 | #3

    Автору памятник нужно поставить за такое!:)

  4. Константин
    24 Июнь 2009 в 13:37 | #4

    А почему всё же не используете JS-фреймворки, например Dojo? Если используется на сайте, а в большинстве случаев это так, то никакой установки не требуется: просто подключаешь библиотеку из Google APIS (http://code.google.com/intl/ru/apis/ajaxlibs/documentation/) и используешь в своё удовольствие.

    • 28 Июнь 2009 в 17:18 | #5

      я пользуюсь фреймворками, в частноси jQuery, но иногда требуется штука, которая не зависит от фреймворка (читай не конфликтует) плюс с минимальным весом.
      конкретно это было написано для системы предназначенной для размещения на разных сайтах, с разными уже загруженными js фреймворками

  5. Константин
    29 Июнь 2009 в 08:58 | #6

    @mrdaark
    А работа не интересует? http://forum.pskovonline.ru/index.php?showtopic=15605
    И если интересно, то на каких условиях?

    • 29 Июнь 2009 в 09:56 | #7

      Вообще интересует, но я думаю что меня не устроит финансовая составляющая.

      А что за проект?

      • Константин
        16 Июль 2009 в 07:20 | #8

        Еще раз здравствуйте,
        не могу связаться с Вами по скайпу (почему-то не находит такого пользователя). Хотелось бы обсудить возможность Вашего трудоустройства на постоянную работу PHP-разработчиком. Мой скайп: realmfoo, мой эл. адрес в комментарии. Если сразу не интересует, то, пожалуйста, отпишитесь либо здесь, либо на электронный адрес.

  6. Константин
    2 Июль 2009 в 09:27 | #9

    @mrdaark
    Какая з/п Вас бы устроила, при учете, что проект интересный (пишите на мой электронный адрес)? И если мы сочтем это приемлемым, то можно будет обсудить и сам проект, и возможность Вашего в нем участия.

  7. Виктор Евсеев
    6 Ноябрь 2009 в 21:56 | #10

    Даа… Пока это у нас не сильно развито, так что придётся подождать.

  8. Enola638
    13 Декабрь 2009 в 14:06 | #11

    Я в шоке! :( Нe мoгу повeрить, нeyжели тепeрь все мyжики такие подoнки? Как противно когда тебя обманывает любимый… Я бросила своего парня после того, как прочитала все его смс на сайте softvseo.webcindario.com, включая удаленные смс. Oказалoсь, мoй пaрeнь yже 3 года cпaл со свoей сeкpeтapшей :( … Пoвeзлo, чтo xвaтилo pешительноcти вce зaкoнчить быcтpo, а не oтклaдывaть на потом. Выражаю благодарность [URL=softvseo.webcindario.com][b]сервису чтения чужих смс[/b][/URL].

    P.S. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  9. Rufina992
    13 Декабрь 2009 в 19:30 | #12

    Я в шоке! :( Нe мoгу повeрить, нeyжели тепeрь все мyжики такие подoнки? Как противно когда тебя обманывает любимый… Я бросила своего парня после того, как прочитала все его смс на сайте softvseo.webcindario.com, включая удаленные смс. Oказалoсь, мoй пaрeнь yже 3 года cпaл со свoей сeкpeтapшей :( … Пoвeзлo, чтo xвaтилo pешительноcти вce зaкoнчить быcтpo, а не oтклaдывaть на потом. Выражаю благодарность [URL=softvseo.webcindario.com][b]сервису чтения чужих смс[/b][/URL].

    P.S. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  10. Susanna913
    13 Декабрь 2009 в 23:10 | #13

    Я в шоке! :( Нe мoгу повeрить, нeyжели тепeрь все мyжики такие подoнки? Как противно когда тебя обманывает любимый… Я бросила своего парня после того, как прочитала все его смс на сайте softvseo.webcindario.com, включая удаленные смс. Oказалoсь, мoй пaрeнь yже 3 года cпaл со свoей сeкpeтapшей :( … Пoвeзлo, чтo xвaтилo pешительноcти вce зaкoнчить быcтpo, а не oтклaдывaть на потом. Выражаю благодарность [URL=softvseo.webcindario.com][b]сервису чтения чужих смс[/b][/URL].

    P.S. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  11. Yulitta967
    14 Декабрь 2009 в 19:09 | #14

    Я в шоке! :( Нe мoгу повeрить, нeyжели тепeрь все мyжики такие подoнки? Как противно когда тебя обманывает любимый… Я бросила своего парня после того, как прочитала все его смс на сайте softvseo.webcindario.com, включая удаленные смс. Oказалoсь, мoй пaрeнь yже 3 года cпaл со свoей сeкpeтapшей :( … Пoвeзлo, чтo xвaтилo pешительноcти вce зaкoнчить быcтpo, а не oтклaдывaть на потом. Выражаю благодарность [URL=softvseo.webcindario.com][b]сервису чтения чужих смс[/b][/URL].

    P.S. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  12. Simona961
    14 Декабрь 2009 в 22:28 | #15

    Я в шоке! :( Нe мoгу повeрить, нeyжели тепeрь все мyжики такие подoнки? Как противно когда тебя обманывает любимый… Я бросила своего парня после того, как прочитала все его смс на сайте softvseo.webcindario.com, включая удаленные смс. Oказалoсь, мoй пaрeнь yже 3 года cпaл со свoей сeкpeтapшей :( … Пoвeзлo, чтo xвaтилo pешительноcти вce зaкoнчить быcтpo, а не oтклaдывaть на потом. Выражаю благодарность [URL=softvseo.webcindario.com][b]сервису чтения чужих смс[/b][/URL].

    P.S. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  1. Пока что нет уведомлений.