2009-01-11 13 views
6

我正在尋找一個AJAX函數來動態請求一個HTML頁面。我已經發現:跨瀏覽器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行:)

+2

跨瀏覽器的任何事情都很棘手。使用jQuery等Javascript框架。它只有30k的空間,並且會爲你解決這個問題以及其他許多問題。 – cletus 2009-01-11 02:03:39

+0

哪個IE失敗? – 2009-01-11 04:36:12

+1

「它只有30k的佔地面積」*只有*有30k的佔地面積是荒謬的。 – Qix 2014-07-28 18:08:35

回答

14

我會同意,不要去重新發明輪子,或在這種情況下,AJAX。

JQuery和Prototype做得非常出色,讓您不必處理跨瀏覽器支持,並大大簡化了Javascript類型編程。我首先陷入了JQuery,所以我偏向於它,從我所看到的庫看起來稍小一點(閱讀:瀏覽器中速度更快),但我認爲Prototype已經有了更長的時間,並且擁有豐富的插件和示例在那裏。 Ruby on Rails默認使用Prototype。有趣的是,兩者的代碼看起來非常相似,並且很少重寫來改變庫。

JQuery Tutorials < - 只是頭部,下至AJAX部分

+14

有一個完全有效的情況,一個人不能/不想使用一個框架,沒有投票,但它的價值考慮到了移動網站和phonegap應用程序,其中一個人可能只需要所需的東西。 – Purefan 2013-05-05 10:04:26

6

我會建議使用任何一種不同的JavaScript框架的這種功能,而不是重新發明它。有jQuery,Prototype/Scriptaculous,MooTools,Dojo,和許多其他。所有這些爲您正在做的事提供跨瀏覽器支持。

+0

儘管並沒有真正想要一個簡單的小函數的整個框架,但是在查看可用的框架之後,我認爲這是最好的路線......沒有意義重新創建已經完成的工作。 – 2009-01-11 14:21:06

2

如果我是你,我會使用像JQuery這樣的工具包來確保它儘可能兼容。然而,無論如何,你將不得不面對不起作用的情況。不要忘記,有很多人在沒有javascript支持的情況下瀏覽。

2

您可以使用該腳本不支持IE瀏覽器版本。在您的功能之前添加this code snippet再次嘗試。然後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; 
} 

順便說一句:我不喜歡一般採用框架 - 有太多的魔力幕後發生的事情讓我感覺很舒服......

3

我建議jQuery的,但有也是一個非常輕量級的解決方案:XHConn