2010-07-16 64 views
5

声明:我对AJAX相当陌生!通过ajax加载JavaScript的最佳实践方法

我环顾四周,我不确定使用哪种方法来使用ajax加载JavaScript。

我正在使用ajax来请求每个需要自己的6-10个简短方法的页面。这些页面总共可能有5-6个,所以总共有35多种方法。

我宁愿访问必要的JavaScript作为每个需要加载的页面。

我已经看到了一些方法,我不知道哪一个最适合我的需求:

  1. 包括在头一个空脚本元素,并通过操纵src属性。 DOM。

  2. 通过创建一个新的脚本元素。 DOM并将其附加到document.body(这听起来与#1相同)。

  3. jQuery(我已经在使用)有一个ajax getScript()方法。
  4. 我还没有读过关于它的任何内容,但是我可以只包含脚本元素作为ajax响应的一部分吗?

因为我对ajax和web开发不熟悉,所以我很好奇每种方法的起伏,以及我错过的任何方法。

一些问题是: - 将使用缓存副本,或每次发出ajax请求时脚本都会下载。请注意,这些脚本将是静态的。 浏览器兼容性。我使用Chrome,但这个应用程序将用于IE> = 7以及Firefox的各个版本。

+2

为什么不只有一个外部文件?如果这些方法非常简短,单个文件将被压缩和缓存,并且对客户端来说可以忽略不计,并且将维护简化为一个'

0

getScript一起去吧。它基本上和第二种方法做同样的事情,但你不必担心如何在各种浏览器(主要是IE)中侦听负载。

就DOM而言,AJAX响应仅仅是文本。除非以某种方式将其插入到DOM中,否则它不起作用。

+0

我会推荐*反对* this,'。.getScript()'故意不缓存,你可以在这里看到:http://github.com/jquery/jquery/blob/master/src/ajax.js#L265 – 2010-07-16 02:03:37

+0

我同意Nick的说法,使用脚本dataType转换$ .ajax的方式。 – 2010-07-16 02:04:36

+0

@Nick @Julian - 好点,我不知道jQuery偷偷在URL中的时间戳:)。我只说'ajaxSetup'永久缓存,或者甚至更好[覆盖](http://jamiethompson.co.uk/web/2008/07/21/jquerygetscript-does-not-cache/)本地'getScript '方法来选择性地允许缓存,并且仍然是向后兼容的。如果jQuery错过了,那么我们不会。这不就是JavaScript的全部内容吗? :P – Anurag 2010-07-16 02:30:56

1

由于所有其他的答案在这里只是说“使用jQuery”没有任何进一步的信息/解释/理由,这可能是值得居然在看你提到的其他选项。

  • 选项#1

    可能是一个有点复杂,因为它需要你等到一个脚本有下载和读取下一个之前运行(如你只有一个脚本元素)。

  • 选项#2

    是更好,因为你可以追加第二个脚本元素DOM第一个完成下载之前,在不影响下载/执行。

  • 选项#3

    受到大家在我之前推荐的,是好的,如果你在一个jQuery环境已经加载(相当沉重)jQuery库用于其他用途 - 加载它仅此一点显然是多余的。值得注意的是,$.getScript()$.ajax()都使用eval()来执行脚本。 eval()在这种情况下不是“邪恶”,因为它是一个值得信赖的来源,但根据我的经验,调试eval()编码可能会稍微困难一些。

  • 选项#4

    是不可能的。

  • 选项#5

    由尼克Craver在第一OP评论推荐的是什么,我会跟TBH去 - 如果脚本是静态的,你说,缓存会比多个HTTP请求更有效。如果你特别关心带宽,你也可以考虑使用cache.manifest进行主动缓存:http://www.html5rocks.com/tutorials/appcache/beginner/