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

2 декабря 2008

короче, суть в том, что нужно мне было сделать штуку, чтобы удобно было делать запросы через 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. вот ссылочка на файл исходника.

Опубликовал:

28 комментариев на «“Изобретая велосипеды: AJAX”»

  1. редко — потому что некогда 🙂
    посты будут, я много пишу на js, но не все достойно опубликования 🙂

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

  3. BepныЙИзмeнниK:

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

  4. Константин:

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

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

  5. Константин:

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

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

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

      • Константин:

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

  6. Константин:

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

  7. Виктор Евсеев:

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

  8. Enola638:

    Я в шоке! 🙁 Н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:

    Я в шоке! 🙁 Н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:

    Я в шоке! 🙁 Н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:

    Я в шоке! 🙁 Н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:

    Я в шоке! 🙁 Н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. Извиняюсь, если запостила не в тот раздел. Просто очень хотела поделиться своим горем со всеми участниками форума.

  13. Перезвоните по номеру 89052783333 Антон

  14. Перезвоните по номеру 89523986999 Василий.

  15. Перезвоните по номеру 8(495) 230-10-78 Иван.

  16. Роман:

    Позвоните мне, пожалуйста, по этому номеру 8(495) 230-10-78

  17. Позвоните мне, пожалуйста, по этому номеру 8(812) 426-88-69

  18. Перезвоните по номеру 8(812) 426-88-69 Иван.

  19. Перезвоните по бесплатному номеру 8 (800) 550-70-98 Иван.

  20. I want to show thanks to this writer just for rescuing me from such a matter. As a result of exploring through the world-wide-web and coming across advice which are not pleasant, I figured my life was done. Living minus the strategies to the problems you’ve resolved by way of your main short article is a critical case, and the ones that would have adversely damaged my career if I hadn’t noticed your blog. Your actual natural talent and kindness in controlling every item was useful. I don’t know what I would’ve done if I hadn’t encountered such a solution like this. It’s possible to now look ahead to my future. Thanks for your time so much for your reliable and result oriented help. I won’t think twice to endorse your web blog to anybody who would like care on this topic.

  21. I must show some thanks to this writer just for bailing me out of such a challenge. As a result of surfing through the search engines and finding notions that were not pleasant, I thought my entire life was gone. Being alive without the presence of answers to the difficulties you have resolved as a result of your main short article is a serious case, and the kind which could have in a negative way affected my career if I had not noticed your web page. Your own competence and kindness in playing with all the things was very helpful. I don’t know what I would’ve done if I had not come upon such a solution like this. I can at this time relish my future. Thanks very much for this skilled and amazing help. I will not hesitate to recommend the blog to anyone who will need direction on this matter.

  22. I wanted to write a remark in order to thank you for those pleasant ideas you are writing on this website. My time consuming internet look up has now been honored with pleasant points to share with my pals. I would state that that we site visitors are truly endowed to live in a remarkable website with so many perfect individuals with useful basics. I feel very much grateful to have used your entire webpages and look forward to tons of more amazing times reading here. Thanks again for everything.

  23. I enjoy you because of all of your efforts on this site. My mom takes pleasure in making time for research and it’s simple to grasp why. We all learn all of the lively method you render simple ideas on your web blog and as well as encourage participation from the others about this situation and our own child has always been studying so much. Take advantage of the remaining portion of the year. You are always conducting a really good job.

  24. I’m also writing to let you know of the incredible encounter my wife’s girl had browsing yuor web blog. She realized a good number of pieces, most notably what it is like to have an awesome giving style to get men and women completely thoroughly grasp various complicated matters. You really surpassed her desires. Many thanks for showing such productive, dependable, informative as well as cool tips on the topic to Tanya.

  25. Оформить онлайн займ сегодня не составляет трудностей. Оформить займ реально в любое время, главное – иметь доступ к сети. Нужно сказать, что, если вы стремитесь взять займ, вам нужно внимательно изучить сервис, где вы будете оформлять ссуду. Советуем обращать интерес при выборе МФО на различные факторы.

    На mega-zaimer.ru очень много людей получают займы. Сервис, который может предоставить срочный online займ – найти не так уж и просто. Очень много сервисов заставляют посетителей предоставлять разные документы, которые могут быть полезны кредитору тогда, если заемщик пропадет. Но, на портале собраны самые лучшие фирмы. Они предоставляют online займы без проверок и без отказа. Исключительно по этой причине они невероятно ценятся, а сервис их рекомендует.

    Некоторые МФО выдают онлайн кредиты на карту. Вы можете сделать выбор, на какую карту вы хотите получить займ. Большинство компаний предоставляют кредиты на дебитные карты. Некоторые организации выдают активы даже на виртуальные кошельки. Часть из компаний, которые размещены на mega-zaimer.ru предоставляют шанс взять первый займ бесплатно.

    В наши дни подобрать сервис, который предоставляет шанс выбирать релевантные предложения очень тяжело. Последнее время безумно много МФО, которые предоставляют подобные услуги, начали оформлять кредиты на месячный срок. Некоторые из таких сервисов есть не надежными. Именно для того, чтобы клиенты могли брать активы без трудностей вне зависимости от ситуации, вы можете оформить ссуду на карту онлайн без отказа в любое время ночи.

    Сервис пользуется спросом из-за того, что он постоянно проводит анализ компаний и сотрудники следят за всеми перетрубациями на рынке. Именно это даёт возможность создать объективный рейтинг всех МФО и солидных кредиторов. На портале размещен каталог новых МФО 2018 года, где доступны самые крутые МФО. Большинство из фирм предоставляют мгновенный займ на карту без проверки кредитной истории, что считается огромным плюсом сегодня.

    На [url=https://mega-zaimer.ru/]https://mega-zaimer.ru/[/url] вы можете найти компанию, которая будет интересна именно вам. Сайт очень простой и доступен для всех посетителей. Стоит выделить, что на ресурсе вы сможете выбрать МФО по следующим критериям: сумма займа, срок займа, регион, метод получения финансов. Большинство людей стремятся оформлять онлайн кредиты на карту, чтобы распоряжаться финансами.

    Сейчас любой посетитель может оформить кредит и ему 100% одобрят его займ. Ведь сервис собрал самых надежных кредиторов, которые считаются настоящими профессионалами. Сотрудники сервиса ежедневно мониторят всю информацию касаемо работы МФО. Шанс получить средства есть даже у тех, у кого плохая кредитная история. Сервис станет полезным и по той причине, что он предлагает сервисы, которые выдают займы ночью.

    Не так много МФО выдают займы в ночное время суток. Сегодня выбрать компанию, которая предоставит займ мгновенно без отказов и проверок на карту круглосуточно, да еще и ночью – практически нереально. Но, сервис предлагает каталок МФО, которые могут быть интересны вам.

    На финансовом портале mega-zaimer.ru посетители имеют шанс получить займы на карту вне зависимости от направления средств. Вам не надо будет докладывать, как в банк, куда будут направлены средства. За вашими транзакциями также не будут следить. Во всех МФО заявки обрабатываются безумно быстро. Также необходимо сказать, что для стабильных кредиторов функционируют специальные предложения. Сервис также оснащен service desk, которая предоставит ответы на любые ваши вопросы при первой же необходимости.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *