如何通过$ .getScript()获取脚本文件

时间:2012-08-03 23:26:58

标签: javascript jquery

我正在尝试从某些代码主机导入一些javascript文件。

    $.when(
        $.getScript('http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js'),
        $.getScript('http://mottie.github.com/tablesorter/js/jquery.tablesorter.js'),
        $.getScript('http://tconnell.com/samples/scroller/lib/jquery.tablesorter.scroller.js'),
        $.getScript('http://code.highcharts.com/stock/highstock.js'), 
        $.Deferred(
            function(deferred) { 
                $(deferred.resolve);
            }
        )
    ).done(function() {  
       // my function goes here....
    });

当我尝试调用这些URL来导入js文件时,这些URL会附加?_=1344036242417,然后我实际上无法访问我想要的脚本文件。

即。 "NetworkError: 404 Not Found - http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js?_=1344036242417"

任何人都有想法如何绕过这个问题?先感谢您。

4 个答案:

答案 0 :(得分:7)

那是因为在jQuery中默认关闭ajax中的缓存,打开它并删除查询字符串:

$.ajaxSetup({ 
    cache: true 
}); 

但这也可能会影响你不想缓存的其他ajax调用,docs for getScript中有更多关于此的调用,甚至还有一些关于创建一个名为cachedScript的缓存getScript函数的方法

您还可以通过使用新选项重新定义函数来启用$ .getScript中的缓存,以通过传递true或false来打开/关闭缓存:

$.getScript = function(url, callback, cache){
    $.ajax({
            type: "GET",
            url: url,
            success: callback,
            dataType: "script",
            cache: cache
    });
};

答案 1 :(得分:5)

jQuery具有针对此类查询的自动缓存机制。 如果您不希望添加额外的参数,请使用以下设置:

$.ajaxSetup({
  cache: true
});

来源:http://api.jquery.com/jQuery.getScript/#caching-requests

答案 2 :(得分:4)

jQuery会自动添加_=1344036242417,这会破坏网址。注意:

阻止jQuery添加该参数:Ajax get request with useless parameter。要总结该答案,请在致电$.ajaxSetup以设置$.getScript()之前使用cache: true

  

默认为[ sic ],$.getScript()将缓存设置设为false。这会将带时间戳的查询参数附加到请求URL,以确保浏览器在每次请求时都下载脚本。您可以使用$.ajaxSetup()全局设置缓存属性来覆盖此功能:

$.ajaxSetup({
    cache: true
});

答案 3 :(得分:2)

附加的查询字符串用于防止缓存。您可以通过enabling caching禁用此功能:

$.ajaxSetup({
  cache: true
});