我正在实施诸如实时搜索之类的东西。例如,如果我写“p”,它会在服务器中进行查询,而“pi”会进行另一个查询。因此,每个写入的字符都会使应用程序向服务器发出请求。
但是,在一些字符之后,如果我立即开始删除,因为所有请求都是异步的,因为搜索栏中没有字符,旧请求会得到一些结果并加载到表中。
我的代码是:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[[ApiClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"cuisines/search/"];
if(![searchText length]){
[self.searchList removeAllObjects];
[self.searchTableView reloadData];
}
else if([searchText length] > 0){
if(searchBar == leftSearchBar){
[[ApiClient sharedClient] getPath:[[NSString stringWithFormat:@"cuisines/search/?q=%@&locale=%@", searchText, locale] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[self.searchList removeAllObjects];
NSMutableArray* list = [responseObject valueForKeyPath:@"cuisines"];
if(list.count > 0){
for (id c in list) {
Cuisine *cuisine = [[Cuisine alloc] initWithAttributes:c];
[self.searchList addObject:cuisine];
}
}
[self.searchTableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(error.description);
}];
}
}
}
那么,当发出新请求时,如何停止先前的请求呢?
编辑:
我在 texDidChange 的开头写了取消请求。但它是一样的。我有个问题:
路径:
cancelAllHTTPOperationsWithMethod:@"GET" path:@"cuisines/search/"];
和
cancelAllHTTPOperationsWithMethod:@"GET" path @"cuisines/search/?q=%@&locale=%@", searchText, locale] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]
是因为根都一样吗?如果不是,我怎样才能找到并取消请求?