Wes*_*ley 0 javascript browser jquery caching jsonp
我正在使用第三方jsonp库进行jquery.在调用它时,您可以将缓存设置为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();
}
});
Run Code Online (Sandbox Code Playgroud)
关于我的设置唯一的"奇怪"的事情是,将调用.jsonp脚本通过一个包括阿贾克斯调用本身..莫非是这里的问题?听起来很遥远,但......
谢谢,韦斯利
编辑:好的,4个中有3个有Expires头设置..
但是,第四个没有,只有这些:
Cache-Control:private Vary:Accept-Encoding Access-Control-Allow-Origin:*Connection:close
(这是flickr)
那里发生了什么?
另外,是不是可以通过jquery以某种方式覆盖头缓存指令?
首先,服务器响应您的jsonp调用必须在响应头中有一些到期日期.正如你所提到的,你无法控制youtube,flickr等如何回答jsonp调用.
浏览器正在使用每个唯一URL的可接受标头缓存调用.
jQuery发送两个使您的URL唯一的数据.如果您不更改这两个选项,您的jsonp调用将永远不会缓存. 在这里阅读更多
callback=jQuery_123971236127631276_=123918712387612398.调用的get参数callback被赋予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',
});
Run Code Online (Sandbox Code Playgroud)
此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
});
Run Code Online (Sandbox Code Playgroud)