2009-01-11 47 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