javascript - Safari 在本地缓存 JSONP 请求

标签 javascript ajax caching safari jsonp

我有一个页面在单个页面加载中多次发出相同的 JSONP 请求。在大多数浏览器中,这都可以正常工作,但 Safari 会在本地缓存响应,直到重新加载页面为止。即使我在响应中发回 Cache-Control: no-cache header 。

考虑以下示例代码:

var plcbCnt = 0;
var plcb = "plcb" + plcbCnt;
while(window[plcb]){
    plcb = "plcb" + (++plcbCnt);
}

$.ajax({
    "url": "http://myserver.com/echoDate",
    "dataType": 'jsonp',
    "jsonp": "cb",
    "jsonpCallback": plcb,
    "success": function(resp){
        $("#pants").html($("#pants").html() + resp + "<br/>");
    }
});

第一个请求返回:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 28
Content-Type: application/javascript
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=g0zwq2qiaheh4145cudddmjo; path=/
X-Powered-By: ASP.NET
Date: Wed, 20 Oct 2010 18:22:12 GMT

plcb0('634231777326425375');

后续调用从本地缓存提供服务,而不是像应有的那样访问服务器。

您可能想知道开头的额外部分是关于设置回调函数的。我可以在那里使用随机数,对吧? 并不真地。我们根据请求的 URL 缓存整个输出,从而避免额外的渲染工作。因此,如果我更改每个请求的回调函数名称,我就会失去服务器缓存的好处。

我能想到的最好办法是在请求中添加一个垃圾参数,并让服务器缓存在创建缓存键时将其从 URL 中删除。但我想先看看是否有更好的选择...关于 Safari 的一些我不了解的东西。

最佳答案

尝试添加哈希参数 - 浏览器会将其视为新请求,并且不会使用其缓存,但在发出请求之前,哈​​希之外的所有内容都会被删除。尝试一下,看看它是否有效:

var callback = '#call' + new Date().getTime();
$.ajax({
    "url": "http://myserver.com/echoDate" + callback,
    "dataType": 'jsonp',
    "jsonp": "cb",
    "jsonpCallback": plcb,
    "success": function(resp){
        $("#pants").html($("#pants").html() + resp + "<br/>");
    }
});

关于javascript - Safari 在本地缓存 JSONP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981295/

相关文章:

javascript - JQuery 范围输入监听器

javascript - 构造函数模式和原型(prototype)模式的区别

javascript - 无法将图像上传到 Node.js

java - 基于 Spring 的单个 ehcache 管理器,用于多模块项目中的多个 ehcache.xml 文件

php - WooCommerce: header 中的迷你购物车似乎已缓存

javascript - 动态删除后如何更改表单ID?

javascript - 更改多个选择选项后的 jQuery 触发事件

javascript - 为什么我的 Ajax 对象返回时未定义?

ASP.NET 和 ajax 响应

c# - 简单的 C# ASP.NET 缓存实现