Safari在iOS 6上缓存$.ajax是否有结果?

自从升级到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参数,并在服务器端丢弃该值。围绕这一问题,这是可行的。我希望这能帮助像我一样花15个小时在这个问题上的其他可怜的人!

Safari在iOS 6上缓存$.ajax是否有结果?

慕后森
浏览 331回答 3
3回答

阿波罗的战车

假设您使用的是jQuery,则所有Web服务请求的解决方案都很简单:$.ajaxPrefilter(function (options, originalOptions, jqXHR) {     // you can use originalOptions.type || options.type to restrict specific type of requests     options.data = jQuery.param($.extend(originalOptions.data||{}, {        timeStamp: new Date().getTime()     }));});了解有关jQuery预筛选器调用的更多信息。这里.如果您没有使用jQuery,请检查文档以查找您选择的库。它们可能具有类似的功能。
打开App,查看更多内容
随时随地看视频慕课网APP