【问题标题】:Getting script by Ajax from cache通过 Ajax 从缓存中获取脚本
【发布时间】:2013-10-14 22:49:58
【问题描述】:

我有以下 ajax 调用:

request = $.ajax({
    context : this,
    dataType : "html",
    cache : true,
    url : "ajaxContent.html",
    success : function(results) {
        jQuery("#result").html(results);
        }
});

html ajaxContent.html 看起来像这样:

<p>some conent</p>
<script type="text/javascript" src="someScript.js" />

问题

每当我调用 ajax 时,我也会调用 someScript.js?=[timestamp]。 我想从缓存中下载 someScript.js - 所以我想从 url 中删除那个时间戳。我怎么能这样做?

【问题讨论】:

  • 一个 jsfiddle 会有所帮助,因为现在我不明白你是如何得到 someScript.js?=[timestamp] 的。
  • 另外,为什么不在任何 ajax 调用完成之前加载 ?让它包含函数,你可以从你的 ajaxContent.html 调用这些函数,而不是每次都包含一个新的脚本标签。
  • @HamzaKubba 我上传了截图。我不想在 ajax 之前加载整个 javascript,因为我不知道需要哪个 js 文件来执行用户可以在加载的站点上执行的一些操作。我想制作高性能的应用程序,所以我正在加载用户将使用的内容。

标签: javascript jquery ajax browser-cache


【解决方案1】:

在你的外部 javascript 中,有一些像这样的简单代码:

var loaded = {};

function loadScript (scriptName) {
    if (!(scriptName in loaded)) {
         loaded[scriptName] = true;

         var head= document.getElementsByTagName('head')[0];
         var script= document.createElement('script');
         script.type= 'text/javascript';
         script.src= scriptName;
         head.appendChild(script);
    }
}

并且,在您的 ajaxContent.html 中,将您的代码更改为:

<script type="text/javascript">
    loadScript("someScript.js");
</script>

【讨论】:

  • 足够接近,但是.. 在我的 .js 文件中,我有重复的方法。例如:jQuery("form").submit(function(){/*一些动作*/})。因此,当用户通过 ajax 调用其他 html 文件时,我需要重新加载 .js。我只想直接从浏览器缓存中加载。
  • 然后把这些方法放到函数里面,加载后调用:&lt;script type="text/javascript"&gt; loadScript("someScript.js"); doSomething();&lt;/script&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2011-02-22
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多