javascript - $.jsonp 不缓存

标签 javascript jquery caching browser jsonp

我正在使用 jquery 的第三方 jsonp 库。在调用它时,您可以将缓存设置为 true。

但是,在检查 HTTP 嗅探器后,似乎所有请求仍在发送到服务器。

这与 picasa、flickr 和 youtube API 一起使用。

什么可能导致此行为?它似乎不是特定于浏览器的,因为我已经在多个浏览器中测试了它,并且所有浏览器的行为都相同(不是缓存)。

调用的 URL 不会从一个请求更改为另一个请求,并且调用如下所示:

        $.jsonp({
            url: url,
            cache: true,
            async: false,
            dataType: 'jsonp',
            data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),
            callbackParameter: "jsoncallback",
            success: function(data)
            {
                $.extend(datasourceOptions, lookupData.onData(data));
                getData();
            }
        });

关于我的设置的唯一“奇怪”的事情是,将调用 .jsonp 的脚本是通过 .ajax 调用本身包含的。这可能是这里的问题吗?听起来很牵强,但是...

谢谢, 韦斯利

编辑:好的,4 个中的 3 个设置了 Expires header ..

但是,第四个没有并且只有这些:

缓存控制:私有(private) 变化:接受编码 访问控制允许来源:* 连接:关闭

(这是 flickr)

那里发生了什么事?

此外,是否无法通过 jquery 以某种方式覆盖 header 缓存指令?

最佳答案

缓存 header

首先,响应 jsonp 调用的服务器必须在响应 header 中包含一些到期日期。正如您提到的,您无法控制 youtube、flickr 等如何应答 jsonp 调用。

浏览器缓存

浏览器使用每个唯一网址可接受的 header 缓存调用。

jQuery JSONP 回调和标识符

jQuery 发送两条数据,使您的 URL 独一无二。 如果您不更改这两个选项,您的 jsonp 调用将永远不会缓存。 Read more here

  • 您的 json 数据填充的实际callback=参数值。看起来像这样:callback=jQuery_123971236127631276
  • 唯一的标识符,使每个 URL 都是唯一的,因此不可缓存。看起来像这样:_=123918712387612398

禁用唯一的 JSONP 回调

名为 callback 的 get 参数被赋予一个由 jQuery 生成的随机名称,以便可以立即触发许多 jsonp 调用,并且响应不会相互干扰。尽管如此,如果您希望缓存某个 jsonp 调用,则必须更改此设置。属性 jsonpCallback 用于覆盖此功能。

$.jsonp({
            url: url,
            dataType: 'jsonp',
            data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),


            // Note: using success : function(){ ... } will not be 
            // called if 'jsonpCallback' attribute is set. 
            jsonpCallback : 'myCallback',
 });

禁用唯一 URL 标识符

此 URL 标识符在参数列表中设置,以便每次调用都是唯一的,如下所示:...&_=1231981238712。可以通过将属性 cache : true 添加到您的选项来删除此功能。

$.jsonp({
            url: url,
            dataType: 'jsonp',
            data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),

            // Note: using success : function(){ ... } will not be 
            // called if 'jsonpCallback' attribute is set. 
            jsonpCallback : 'myCallback',

            // Disables: ... &_=1231829812386
            cache : true
 });

关于javascript - $.jsonp 不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826307/

相关文章:

javascript - JS窗口打印边距破表

java - 对 Spring MVC 的 AJAX 调用有效,但未命中成功函数

caching - 清除 CMake 的内部缓存

django - 如何使用 Redis 作为 Django 项目的缓存服务器?

mysql - 轮到 `now()` 以获得更好的缓存?

javascript - ng-repeat 的问题

javascript - 选择框 ID 值未在 javascript、html 中检索

javascript - ng-checked 时 ng-models 不绑定(bind)

javascript - asp.net mvc 中的对象数组数据始终为 null

javascript - c# 如何从网站复制文本(不是源代码)