自从升级到iOS 6以来,我们看到Safari的web视图可以自由缓存$。ajax调用。这是在一个PhoneGap应用程序的上下文中,所以它使用Safari WebView。我们的美元。ajax调用是POST方法,我们有缓存设置为false {cache:false},但这仍然发生。我们尝试手动添加一个时间戳到头部,但它没有帮助。
我们做了更多的研究,发现Safari只返回具有静态函数签名的web服务的缓存结果,并且在每次调用之间不会改变。例如,想象一个函数是这样的:
getNewRecordID(intRecordType)
这个函数一遍又一遍地接收相同的输入参数,但它每次返回的数据应该是不同的。
苹果一定是急于让iOS 6运行得令人印象深刻,他们对缓存设置太满意了。有人在iOS 6上看到过这种行为吗?如果是的话,到底是什么原因造成的呢?
我们发现的解决方法是修改函数签名,像这样:
getNewRecordID(intRecordType, strTimestamp)
然后总是传递一个TimeStamp参数,并在服务器端丢弃这个值。这就解决了这个问题。
根据应用程序的不同,你可以在iOS 6中使用Safari>Advanced>Web Inspector来解决这个问题,所以这对这种情况很有帮助。
将手机连接到Mac电脑上的Safari浏览器,然后使用开发人员菜单来解决web应用程序的问题。
在更新到iOS6后,清除iPhone上的网站数据,包括使用Web View的特定应用程序。只有一个应用程序有问题,这解决了它在IOS6 Beta测试的方式,从那以后没有真正的问题。
你可能也需要看看你的应用,如果在自定义应用的WebView中,检查NSURLCache。
https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003754
我想这取决于你的问题的真正性质,实现等等。
裁判:美元。ajax调用
我认为你已经解决了你的问题,但是让我分享一个关于web缓存的想法。
确实,你可以在你使用的每种语言中添加许多头文件,服务器端,客户端,你可以使用许多其他技巧来避免web缓存,但总是认为你永远不知道客户端从哪里连接到你的服务器,你永远不知道他是否使用酒店的“热点”连接,使用Squid或其他缓存产品。
如果用户使用代理来隐藏他的真实位置,那么避免缓存的唯一方法就是请求中的时间戳,如果没有使用的话。
例如:
/ajax_helper.php?ts=3211321456
然后每个缓存管理器你必须通过没有找到相同的URL在缓存库和去重新下载页面内容。