use*_*458 6 post json ios afnetworking afnetworking-2
自从升级我的IOS代码以使用AFNetworking版本2.0而不是1.x后,我无法再使用JSON参数执行HTTP Post.
我怀疑这是因为我的HTTP请求标头不是"application/json",但我试图这样做但它仍然无法正常工作.
这是我尝试通过JSON POST的测试代码:
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
email, @"email",
password, @"password",
nil];
[[OTApiClient sharedInstance] POST:@"login" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"result: %@", responseObject);
Boolean response = [[responseObject valueForKey:@"success"] boolValue];
if(response == TRUE) {
//ok, success
NSLog(@"success");
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Success!" message:@"Successfully logged in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
} else {
NSLog(@"Not successful");
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"The email or password is incorrect." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@ , for operation: %@", error, operation);
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"There is a problem connecting to the server, please try again soon." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
}];
});
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0xca80730 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.} , for operation: <AFHTTPRequestOperation: 0xca6bee0, state: isFinished, cancelled: NO request: <NSMutableURLRequest: 0xca76040> { URL: http://1.2.3.4:9000/api/login }, response: <NSHTTPURLResponse: 0xc963d60> { URL: http://1.2.3.4:9000/error404 } { status code: 404, headers {
"Content-Length" = 1809;
"Content-Type" = "text/html; charset=utf-8";
Run Code Online (Sandbox Code Playgroud)
}}>
我非常确定服务器已启动且可访问,因为所有其他GET调用都能正常工作.
我已经检查了AFNetworking 2.0的更新文档,看起来我所拥有的是进行JSON POST的正确方法
如果我遗漏了什么,请告诉我
谢谢你
use*_*458 22
实际上,我终于开始工作了.
基本上,对于AFHTTPRequestOperationManager的requestSerializer,我使用的是AFHTTPRequestSerializer,然后尝试将Content-Type设置为"application/json"
但是一旦我转而使用AFJSONRequestSerializer,它现在工作正常
AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
operationManagerInstance.requestSerializer = requestSerializer;
Run Code Online (Sandbox Code Playgroud)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
Run Code Online (Sandbox Code Playgroud)
现在它会起作用.
| 归档时间: |
|
| 查看次数: |
11526 次 |
| 最近记录: |