tôi thực hiện một phương pháp bài
/**
* Services gateway
* Method get response from server
* @parameter -> object: request josn object ,apiName: api endpoint
* @returm -> void
* @compilationHandler -> success: status of api, response: respose from server, error: error handling
*/
+ (void)getDataWithObject:(NSDictionary *)object onAPI:(NSString *)apiName withController:(UIViewController*)controller
:(void(^)(BOOL success,id response,NSError *error))compilationHandler {
controller = controller;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// set request type to json
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// post request to server
[manager POST:apiName parameters:object success:^(AFHTTPRequestOperation *operation, id responseObject) {
// NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:responseObject
options:0
error:&error];
//NSString *JSONString = [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
////
// check the status of API
NSDictionary *dict = responseObject;
NSString *statusOfApi = [[NSString alloc]initWithFormat:@"%@"
,[dict objectForKey:@"OK"]];
// IF Status is OK -> 1 so complete the handler
if ([statusOfApi isEqualToString:@"1"]) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
compilationHandler(TRUE,responseObject,nil);
} else {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSArray *errorMessages = [responseObject objectForKey:@"messages"];
NSString *message = [errorMessages objectAtIndex:0];
[Utilities showAlertViewWithTitle:apiName message:message];
compilationHandler(FALSE,responseObject,nil);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSString *message = [NSString stringWithFormat:@"%@",[error localizedDescription]];
NSLog(@"Message is %@", message);
NSString *errorMessage = [NSString stringWithFormat:@"%@",[error localizedDescription]];
if (!([message rangeOfString:@"The request timed out."].location == NSNotFound)) {
[Utilities showAlertViewWithTitle:apiName message:errorMessage];
}
compilationHandler(FALSE,errorMessage,nil);
}];
// For internet reachibility check if changes its state
[self checkInternetReachibility:manager];
}
** Ví dụ: khi chúng ta gọi là Dịch vụ **
// calling service gateway API
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
"field",@"value",
nil];
[self getDataWithObject:dict onAPI:KGet_Preferences withController:(UIViewController*)controller :^(BOOL success, id response, NSError *error) {
if(success) {
NSMutableDictionary *data = [[response valueForKey:@"data"] valueForKey:@"preferences"];
compilationHandler(success,data,error);
} else {
compilationHandler(success,nil,error);
}
}];
Nguồn
2016-02-19 05:27:55
Có lẽ tôi thiếu cái gì đó, nhưng tôi không thấy nó trả lời câu hỏi như thế nào. Câu hỏi đặt ra là cách thông số bài đăng một phần trong phần thân của yêu cầu HTTP và một phần trong URL. Nếu chúng ta sử dụng 'AFHTTPRequestOperationManager' và 'POST', theo mặc định, tất cả các tham số sẽ được đưa vào phần thân của yêu cầu bằng AFNetworking. –
Nó không trả lời câu hỏi. Trong phương thức của bạn, bạn chỉ sử dụng phần thân JSON và không sử dụng các tham số URI. –