2009-01-11 11 views
6

Szukam funkcji AJAX, aby dynamicznie żądać strony HTML. Ja już znalazłem następujące:Funkcja AJAX przeglądarki krzyżowej do dynamicznego ładowania 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; 
} 

Współpracuje w Firefox i Chrome, ale nie w IE na następujący wiersz:

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

czy istnieje lepszy dostępna funkcja, która jest gwarantowana być całkowicie kompatybilny z przeglądarką?

Edytuj: Dziękuję za wszystkie wspaniałe sugestie ... w końcu zdecydowałem, że nie wymyślam tutaj koła. Jedną z rzeczy, o których zapomniałem wspomnieć było to, że muszę ją aktualizować w pewnym odstępie czasu ... chociaż już to wymyśliłem, więc nie sądziłem, że to ma jakiś wpływ. Ale wtedy znalazłem wspaniałą metodę Ajax.PeriodicUpdater() w prototypie i ogromnie zmieniłem zdanie. Poszedłem z roztworu 50 LOC do około 4 liniach :)

+2

Coś dla wielu przeglądarek jest trudne. Użyj architektury JavaScript, takiej jak jQuery. Ma tylko 30-kilogramowy ślad i rozwiąże dla ciebie to i wiele innych problemów. – cletus

+0

Którego IE ma awarię? –

+1

'Ma tylko 30k footprint' * tylko * mając 30k śladu jest absurdem. – Qix

Odpowiedz

14

musiałbym się zgodzić, nie idź odkrywanie koła na nowo, lub w tym przypadku, AJAX.

jQuery i Prototype zrobić doskonałą pracę pozwalając nie masz do czynienia ze wsparciem cross-browser, a także znacznie upraszcza programowanie typu Javascript. Wpadłem najpierw na JQuery'ego, więc jestem stronniczy w stosunku do niego i z tego, co widziałem, biblioteka jest nieco mniejsza (czytaj: szybsza w przeglądarce), ale prototyp, jak sądzę, był już od dawna i ma mnóstwo wtyczek i przykładów tam na zewnątrz. Ruby on Rails domyślnie używa Prototype. Co ciekawe, kod w obu wygląda bardzo podobnie i zajmuje niewiele czasu, aby zmienić biblioteki.

JQuery Tutorials < - Wystarczy udać się na dół do sekcji AJAX

+14

Istnieją doskonale uzasadnione sytuacje, w których nie można/nie chce się używać ram, nie ma głosu w dół, ale warto wziąć pod uwagę strony mobilne i aplikacje phonegap, gdzie można chcieć tylko tego, co jest potrzebne. – Purefan

+2

Dałbym Purefanowi milion nagród, jeśli mógłbym to zrobić bez prześladowania go w pobliżu stackoverflow. Jquery jest z pewnością fajny dla różnych przeglądarek, ale czasami najlepiej jest spakować światło i pracować na niższym poziomie. –

6

Moim przy użyciu dowolnego z wielu różnych ram JavaScript dla tej funkcji zamiast wymyślania go. Jest jQuery, Prototype/Scriptaculous, MooTools, Dojo i wiele innych. Wszystkie te oferują obsługę różnych przeglądarek dla tego, co robisz.

+0

Pomimo tego, że nie chcę całego systemu dla jednej prostej funkcji, po zapoznaniu się z dostępnymi frameworkami zgadzam się, że jest to najlepsza trasa ... nie ma sensu odtwarzać pracy, która została już wykonana. –

2

Gdybym był tobą, będę korzystać z zestawu narzędzi, takich jak JQuery, aby upewnić się, że jest możliwie jak najbardziej zgodny. Niezależnie od tego, będziesz musiał zajmować się przypadkami, w których to nie działa. Nie zapominaj, że jest mnóstwo ludzi, którzy przeglądają bez obsługi javascript.

2

Można użyć wersji IE, które skrypt nie obsługuje. Spróbuj ponownie, dodając przed dodaniem funkcji this code snippet. ajaxinclude() może być skrócony do

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

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

Tak na marginesie: ja generalnie nie lubię za pomocą ram - nie ma zbyt dużo magia dzieje się za kulisami mi czuć się komfortowo ...

+2

Zgoda na zakłopotanie za kulisami magii ... Wiedziałem, że ramy istnieją, ale nie sądziłem, że potrzebuję całej ogromnej struktury, kiedy potrzebuję tylko jednej prostej funkcji. –

+0

@Adam: Czy próbowałeś mojej sugestii? – Christoph

+1

tak ... Zrobiłem to i działało lepiej. Po prostu poszedłem z ramą, ponieważ wynikowy kod był znacznie czyściejszy. –

3

Polecam jQuery, ale jest również bardzo lekkie rozwiązanie: XHConn

+3

XHConn nie był aktualizowany od kwietnia 2005, jeśli ktoś jest ciekawy. –

Powiązane problemy