Javascript $.jsonp未缓存

Javascript $.jsonp未缓存,javascript,jquery,caching,browser,jsonp,Javascript,Jquery,Caching,Browser,Jsonp,我将第三方jsonp库用于jquery。在对它的调用中,可以将cache设置为true 但是,在签入HTTP嗅探器后,所有请求似乎仍在发送到服务器 这是通过picasa、flickr和youtube API实现的 是什么导致了这种行为?它似乎不是特定于浏览器的,因为我已经在多个浏览器中对它进行了测试,并且所有浏览器的行为都相同(不是缓存) 调用的URL不会从一个请求更改为另一个请求,调用如下所示: $.jsonp({ url: url,

我将第三方jsonp库用于jquery。在对它的调用中,可以将cache设置为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标题。

但是,第四种方法没有,也只有:

缓存控制:专用 改变:接受编码 访问控制允许来源:* 连接:关闭

(我是flickr)

那里发生了什么事


另外,是否不可能通过jquery以某种方式覆盖头缓存指令?

我希望您调用的服务返回缓存控制头,这些头告诉浏览器不要缓存响应/让缓存响应很快过期。您应该能够在HTTP消息中看到它们。寻找
缓存控制
和/或
过期
,诸如此类的东西

重新编辑:

另外,是否不可能以某种方式通过jquery重写头缓存指令

我不这么认为,不,JSON-p肯定不行,它的核心是一个
script
元素被添加到页面中,因此对它的编程控制将非常有限。坦白地说,即使是XHR,我也不认为有什么方法可以告诉浏览器使用一个根据其来源而过时的缓存版本


如果这是在页面生命周期内发生的,您可以自己将结果缓存在页面上的对象中,但我猜您所说的是在访问页面之间进行缓存(尽管我无法立即理解您为什么要取消源代码对“新鲜/陈旧”的定义).

我希望您调用的服务返回缓存控制头,告诉浏览器不要缓存响应/让缓存响应很快过期。您应该能够在HTTP消息中看到它们。寻找
缓存控制
和/或
过期
,诸如此类的东西

重新编辑:

另外,是否不可能以某种方式通过jquery重写头缓存指令

我不这么认为,不,JSON-p肯定不行,它的核心是一个
script
元素被添加到页面中,因此对它的编程控制将非常有限。坦白地说,即使是XHR,我也不认为有什么方法可以告诉浏览器使用一个根据其来源而过时的缓存版本

如果这是在页面生命周期内发生的,您可以自己将结果缓存在页面上的一个对象中,但我猜您所说的是在访问页面之间进行缓存(尽管我无法立即理解您为什么要取消源代码对“新鲜/陈旧”的定义)。

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

浏览器缓存 浏览器正在为每个唯一url缓存带有可接受头的调用

jQuery JSONP回调和标识符 jQuery发送两条数据,使您的URL唯一如果不更改这两个选项,jsonp调用将永远不会缓存。

  • json数据填充的实际callback=param值。如下所示:
    callback=jQuery\u 123971236127631276
  • 唯一标识符,使每个URL唯一,因此不可缓存。看起来像这样:
    \u=123918712387612398
禁用唯一JSONP回调 调用的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
 });
缓存头 首先,响应jsonp调用的服务器必须在响应头中包含一些过期日期。正如您提到的,您无法控制youtube、flickr等如何应答jsonp调用

浏览器缓存 浏览器正在为每个唯一url缓存带有可接受头的调用

jQuery JSONP回调和标识符 jQuery发送两条数据,使您的URL唯一如果不更改这两个选项,jsonp调用将永远不会缓存。

  • json数据填充的实际callback=param值。如下所示:
    callback=jQuery\u 123971236127631276
  • 唯一标识符,使每个URL唯一,因此不可缓存。看起来像这样:
    \u=123918712387612398
禁用唯一JSONP回调 调用的get参数
回调
由jQuery生成一个随机名称,这样可以一次触发许多jsonp调用,并且响应不会相互干扰。但是,如果您希望缓存某个jsonp调用,则必须更改此项。属性
jsonpC