【问题标题】:Cross browser AJAX function to dynamically load HTML跨浏览器 AJAX 功能动态加载 HTML
【发布时间】:2023-03-26 09:08:01
【问题描述】:

我正在寻找一个动态请求 HTML 页面的 AJAX 函数。我已经找到了以下内容:

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 行 :)

【问题讨论】:

  • 跨浏览器任何事情都很棘手。使用像 jQuery 这样的 Javascript 框架。它只有 30k 的占用空间,可以为您解决这个问题以及许多其他问题。
  • It only has a 30k footprint only 拥有 30k 的足迹是荒谬的。

标签: javascript ajax


【解决方案1】:

我建议使用许多不同的 JavaScript 框架中的任何一个来实现此功能,而不是重新发明它。有jQueryPrototype/ScriptaculousMooToolsDojo 等等。所有这些都为您正在做的事情提供跨浏览器支持。

【讨论】:

  • 尽管不是真的想要一个完整的框架来实现一个简单的小功能,但在查看了可用的框架之后,我同意,这是最好的方法......没有必要重新创建已经完成的工作。跨度>
【解决方案2】:

如果我是你,我会使用 JQuery 之类的工具包,以确保它尽可能兼容。但是,无论如何,您都将不得不处理它不起作用的情况。不要忘记,有很多人在没有 javascript 支持的情况下浏览。

【讨论】:

    【解决方案3】:

    如果您不需要整个框架,也可以试试这个:http://www.hunlock.com/blogs/The_Ultimate_Ajax_Object

    【讨论】:

      【解决方案4】:

      我不得不同意,不要重新发明轮子,或者在这种情况下,AJAX。

      JQuery 和 Prototype 在让您不必处理跨浏览器支持方面做得非常出色,并大大简化了 Javascript 类型编程。我首先进入了 JQuery,所以我偏向于它,从我所看到的库来看,它有点小(阅读:在浏览器中更快),但我相信 Prototype 已经存在了更长的时间,并且有大量的插件和示例在那里。默认情况下,Ruby on Rails 也使用 Prototype。有趣的是,两者中的代码看起来非常相似,并且几乎不需要重写即可更改库。

      JQuery Tutorials

      【讨论】:

      • 在某些完全有效的情况下,人们不能/不想使用框架,我没有反对,但值得考虑移动网站和 phonegap 应用程序,在这些情况下,人们可能只想要这样的东西需要。
      • 如果我能做到这一点而不在 stackoverflow 上跟踪他,我会给 Purefan 一百万个赞。 Jquery 肯定适合跨浏览器的东西,但有时最好轻装上阵并在较低级别上工作。
      【解决方案5】:

      您可能使用脚本不支持的 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;
      }
      

      顺便说一句:我通常不喜欢使用框架 - 幕后发生了太多的魔法让我感到不舒服......

      【讨论】:

      • 同意对幕后魔术感到不舒服...我知道框架存在,但我只是认为我不需要一个庞大的框架,而我真的只需要一个简单的功能。跨度>
      • @Adam:你试过我的建议了吗?
      • 是的...我做到了,而且效果更好。我最后还是选择了框架,因为生成的代码更清晰。
      • 我会觉得重新发明轮子会更不舒服。数百万人使用 jQuery,因此也有数百万人对其进行了调试。这不是魔术。它是 JavaScript。开源,所以你可以看看源代码。如果你有修复,你可以回馈。
      【解决方案6】:

      我推荐jQuery,但也有一个非常轻量级的解决方案:XHConn

      【讨论】:

      • 如果有人好奇的话,XHConn 自 2005 年 4 月以来就没有更新过。
      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多