自从升级到iOS 6,我们看到Safari的web视图可以自由缓存$.ajax
调用。这是在一个PhoneGap应用程序的上下文中,所以它使用Safari WebView。我们的$.ajax
调用是POST
方法,我们有缓存设置为false {cache:false}
,但这仍然发生了。我们尝试手动添加TimeStamp
到头部,但它没有帮助。
我们做了更多的研究,发现Safari只返回具有静态函数签名的web服务的缓存结果,并且在每次调用之间不会改变。例如,想象一个函数是这样的:
getNewRecordID(intRecordType)
这个函数一遍又一遍地接收相同的输入参数,但它每次返回的数据应该是不同的。
苹果一定是急于让iOS 6运行得令人印象深刻,他们对缓存设置太满意了。有人在iOS 6上看到过这种行为吗?如果是的话,到底是什么原因造成的呢?
我们发现的解决方法是修改函数签名,像这样:
getNewRecordID(intRecordType, strTimestamp)
然后总是传入一个TimeStamp
参数,并在服务器端丢弃该值。这就解决了这个问题。