【发布时间】:2012-02-12 19:21:30
【问题描述】:
我正在使用 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,请求也会始终尝试检索 JSON,这会降低性能。
我怎样才能让它首先检查服务器是否修改了数据,如果修改了则检索它?目前我从 php url 获取 JSON 数据作为动态响应,所以没有文件可以检查数据的最新性。
有什么解决办法?
问候,
【问题讨论】:
标签: objective-c ios caching asihttprequest