我正在使用ASIHTTPRequest API从Web端获取一些JSON数据。我正在使用异步请求而不更改默认缓存属性。代码如下:
__unsafe_unretained ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
request.timeOutSeconds = 30;
[request setCompletionBlock:^(void)
{
NSString *str = [request responseString];
/*
*
*
*/
}];
[request setFailedBlock:^(void)
{
NSLog(@"status: %@",[request responseStatusMessage]);
NSLog(@"%@ : %@",[request url],[[request error] debugDescription]);
}];
[request startAsynchronous];
但是,虽然服务器中的JSON数据内容发生了变化,但获取的JSON数据仍然是旧数据。
我使用网络浏览器检查数据,包括笔记本电脑和iPhone Safari。当我在更改JSON后请求url时,它首先返回旧数据,但如果我刷新页面,它将返回更新的数据。但在应用程序中,ASIHTTPRequest始终返回旧数据。
我还尝试调试ASIHTTPRequest代码,以查看是否使用了任何缓存数据。但它似乎永远不会使用下载缓存,因为它尚未设置。它永远不会进入[useDataFromCache]方法。
可能是什么问题?我如何强制ASIHTTPRequest检查服务器上是否有更新的数据,并使其获得真正更新的JSON?
修改
我使用了Cache-Control标头,现在我获得了正确更新的JSON数据。代码如下:
[request addRequestHeader:@"Cache-Control" value:@"no-cache"];
但是,我认为从现在起请求将始终尝试检索JSON,即使它未被修改,这将降低性能。
如何让它首先检查服务器是否修改了数据,并检索它是否被修改?目前我从一个php url获取JSON数据作为动态响应,因此没有文件可以检查数据的日期。
可能是什么解决方案?
此致
答案 0 :(得分:1)
鉴于你所说的一切,ASIHTTPRequest似乎不太可能缓存响应。
所以,必须有其他东西 - 看起来你和服务器之间有一个缓存代理服务器,这就是设置Cache-Control有所不同的原因。
它可能是您本地网络上的代理服务器,也可能是您的ISP,或者它可能位于您正在使用的Web服务器前面。
答案 1 :(得分:0)
根据ASIHTTPRequest的文档,调用方法
[[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
将清除缓存。在发送请求之前调用此方法,它应该为您提供更新的JSON数据。