Кросс-браузерная функция AJAX для динамической загрузки HTML - PullRequest
6 голосов
/ 11 января 2009

Я ищу функцию AJAX для динамического запроса HTML-страницы. Я уже нашел следующее:

function ajaxinclude(url) 
{
   var page_request = false

   if (window.XMLHttpRequest) // if Mozilla, Safari etc
      page_request = new XMLHttpRequest()
   else if (window.ActiveXObject) // if IE
   { 

     try {
       page_request = new ActiveXObject("Msxml2.XMLHTTP")
     } 
     catch (e){
       try{
         page_request = new ActiveXObject("Microsoft.XMLHTTP")
       }
       catch (e){}
     }
   }
   else
     return false

   page_request.open('GET', url, false) //get page synchronously 
   page_request.send(null)
   return page_request.responseText;
 }

Он отлично работает в Firefox и Chrome, но не работает в IE на следующей строке:

page_request.open('GET', url, false)

Существует ли лучшая доступная функция, которая гарантированно полностью совместима с браузерами?

Редактировать: Спасибо за все отличные предложения ... В конце концов, я решил не изобретать колесо здесь. И одна из вещей, о которых я забыл упомянуть, это то, что мне также нужно обновлять его с интервалом ... хотя я уже понял это, поэтому я не думал, что это что-то меняет. Но затем я нашел отличный метод Ajax.PeriodicUpdater () в прототипе и значительно изменил свое мнение. Я только что перешел от решения 50 LOC к примерно 4 строкам:)

Ответы [ 6 ]

14 голосов
/ 11 января 2009

Я бы согласился, не изобретай велосипед, или, в данном случае, AJAX.

JQuery и Prototype отлично справляются с задачей, позволяя вам НЕ заниматься кросс-браузерной поддержкой и значительно упрощают программирование типов Javascript. Сначала я попал в JQuery, так что я склонен к этому, и из того, что я увидел, библиотека немного меньше (читай: быстрее в браузере), но я считаю, что Prototype существует дольше и имеет множество плагинов и примеров там Ruby on Rails также по умолчанию использует Prototype. Достаточно забавно, но код в обоих выглядит очень похожим и требует немного переписать, чтобы изменить библиотеки.

Обучающие программы по JQuery <- Просто зайдите в раздел AJAX </p>

8 голосов
/ 11 января 2009

Или вы можете попробовать это, если вам не нужен весь фреймворк: http://www.hunlock.com/blogs/The_Ultimate_Ajax_Object

6 голосов
/ 11 января 2009

Я бы предложил использовать любой из нескольких различных javascript-фреймворков для этой функции, а не изобретать ее заново. Есть jQuery , Prototype / Scriptaculous , MooTools , Dojo и многие другие. Все они предлагают кросс-браузерную поддержку того, что вы делаете.

3 голосов
/ 12 января 2009

Я рекомендую jQuery, но есть и очень легкое решение: XHConn

2 голосов
/ 11 января 2009

Вы можете использовать версию IE, которую не поддерживает ваш скрипт. Попробуйте еще раз, добавив этот фрагмент кода перед вашей функцией. ajaxinclude() может быть сокращено до

function ajaxinclude(url)  {
    var req = new XMLHttpRequest;
    if(!req)
        return null;

    req.open('GET', url, false); // get page synchronously 
    req.send();
    return req.responseText;
}

Как отступление: я вообще не люблю использовать фреймворки - за кулисами происходит слишком много магии, чтобы я чувствовал себя комфортно ...

2 голосов
/ 11 января 2009

На вашем месте я бы использовал такой инструментарий, как JQuery, чтобы убедиться, что он максимально совместим. Независимо от того, что, однако, вам придется иметь дело со случаями, когда это не работает. Не забывайте, что есть много людей, которые просматривают без поддержки javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...