我对使用“GET”和“POST”请求返回的JSON数据有以下疑问。在以下URL JSON DATA中,并不总是根据服务器更改(例如:数据库)更新数据。例如,如果我在之前有3个时删除了数据库中的所有建议记录,当我调用dataTaskWithRequest时,它仍会在我的JSON响应主体中返回3个建议记录。
但是,如果我更改为POST,那么JSON响应正文将始终使用服务器的实际记录进行更新。在我的服务器代码(使用CakePHP)中,我没有检查发布或获取数据。实际上,它本来是一个GET方法,但由于某种原因,只有POST方法似乎总是从JSON获取最新的数据,而不是GET。
以下是我的iOS客户端的代码,但我不太确定它是否非常有用。我想知道GET请求是否存在缓存问题而不是POST请求?但是,我尝试禁用NSURLSessionConfig
的缓存,但它没有任何影响。
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
代码库如下:
NSString *requestString = [NSString stringWithFormat:@"%@/v/%@.json", hostName, apptIDHash];
NSURL *url = [NSURL URLWithString:requestString];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
if (!error) {
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
if (httpResp.statusCode == 200) {
NSError *jsonError;
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];
[self printJSONOutputFromDictionary:jsonObject];
if (!jsonError) {
block(jsonObject, nil);
}
else{
block(nil, jsonError);
}
}
else{
NSError *statusError = [self createServerUnavailableNSError:httpResp];
block(nil, statusError);
}
}
else{
block(nil, error);
}
}];
[dataTask resume];
在上面的代码片段中,JSON主体始终显示过时的数据。
我真的很想了解这个问题,如果有人能为我解释这个问题,我真的很感激。
答案 0 :(得分:0)
尝试添加以下请求标头:
[req addRequestHeader:@"Cache-Control" value:@"no-cache"];
我遇到了和你一样的问题,添加上面的代码解决了我的问题。