jQuery版本1.5 - ajax - <script>标记时间戳问题</script>

时间:2011-02-16 21:49:42

标签: javascript jquery ajax timestamp jquery-1.5

如果我使用带有脚本标记的ajax(jQuery)加载一些内容,jQuery 1.5会将时间戳添加到脚本标记src url中。见下文的例子。

实施例: 我用ajax加载的内容:

<div>text1</div>
<script type="text/javascript" src="/js/abc-xyz.js?r=1.1"></script>

这是我将以前的内容插入页面后加载脚本代码的src网址:

.../js/abc-xyz.js?r=1.1&_=1297892228466

有人知道为什么会这样吗? 它只发生在jQuery 1.5上。 jQuery 1.4.4不会发生这种情况。

代码示例:

$.ajax({
    url: content.html,
    type: 'GET',
    data: someDataObject,
    success: function(data) {
        // some code here

    },
    error: function(data) {
        // some code here
    }
});

感谢。

2 个答案:

答案 0 :(得分:8)

请参阅我从jQuery团队得到的答案。 机票#8298:http://bugs.jquery.com/ticket/8298

答案:

在检查您的报告和您的代码示例后,我得出结论,这不是一个错误。我还提到this test case jQuery 1.4+(直到1.5)有一个错误导致缓存选项不对脚本请求默认为false。这个错误(见#7578)已在1.5中修复。 现在您可能知道或不知道的是,jQuery在执行DOM操作时会执行特殊处理脚本标记(以防止IE中的某些错误)。它过滤掉它们并通过ajax请求它们。这解释了为什么即使是“普通”内联脚本标记突然被请求使用其他url参数。 如果它对您有不良副作用,有办法解决这个问题。

  1. 在适当的时候使用$.ajaxSetup({ cache: true })

  2. 使用prefilter来处理脚本请求,例如检查你不想要的网址 要添加的随机参数,并在那些

  3. 的预过滤器中设置cache:true 例如,
  4. 成功回调通过沿着这些做某事来处理脚本标记..

  5. ..行:

    var elems = $(htmlwithscripttags);
    elems.filter("script") //now do whatever with the scripts
    elems.filter(":not(script)").appendTo("body"); //e.g.
    

答案 1 :(得分:7)

迈克尔在 his comment 中是正确的,如果要禁用它,请使用: ajax请求中的cache: true。要启用,请使用cache: false(我认为是默认设置)。

要禁用时间戳:

$.ajax({
    url: content.html,
    cache: true,
    type: 'GET',
    data: someDataObject,
    success: function(data) {
        // some code here

    },
    error: function(data) {
        // some code here
    }
});