如何使用AFNetwork刷新或取消服务器调用(GET/POST)



我有一个文本字段USERNAME。在这里,当用户开始键入时,对于每个字母,我都必须点击服务器检查"用户名可用性"。现在我把它称为前台,所以它有点卡住了。我无法取消或刷新以前的连接。知道吗?

注意:我使用的是AFNetwork会话管理器。

如果您使用以下AFNetworking:

AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
NSURLSessionDataTask *task = [sessionManager GET:@"http://example.com/resources.json" parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

你可以使用

[task cancel];

如果您使用以下AFNetworking:

AFHTTPRequestOperationManager *operationManager=[AFHTTPRequestOperationManager manager];
requestOperation=[operationManager GET:@"" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
}];

你可以使用

[requestOperation cancel];

您的方法很好。但在这里我建议一些新的方法。当您要键入时,此时为每个字符为什么要调用web服务并增加负载。请查看以下建议。

  1. 如果你要检查用户名,你应该在写了至少3个字母后调用api。因为只有在那之后,任何单词都可以用作用户名,否则就是字符。这完全取决于您正在实现的功能需求。

  2. 只需等待用户停止键入,然后只调用web服务。中间是用户连续打字(直到等待一段时间),取消之前的请求,使用下面的代码调用web服务。

[NSObject cancelPerformSelectorsWithTarget:self];
[self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f];

最新更新