我是iOS和AFNetworking的新手。我已经习惯了Titanium以及在Javascript中使用类似于xhr的模型发布和获取数据的非常简单的方法。我向我的服务器发送一个Post请求并返回JSON。它在Titanium中完美无瑕地工作,但是我有点时间让它在本地工作。
在对Titanium的后端进行一些调查后,看起来他们正在使用ASI,我觉得这很有趣。现在似乎AFNetworking是另一种选择,因为ASI不再被更新。但是,当我发送下面的请求时,它会收到text / html响应而不是JSON响应。我猜这是因为参数以及它们的发送方式。
在另一个StackOverflow问题上,该人需要向服务器提供标准的post变量,服务器使用JSON进行响应,这正是我需要做的。建议是在你的AFHTTPClient中设置“parameterEncoding to AFFormURLParameterEncoding”,但我不知道该怎么做。如果有人能帮我解决这个问题,我将永远感激不尽。我可以提供实际的帖子地址和虚拟用户/通行证,如果这有助于任何人解决这个问题。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"username": @"dummyusername",@"password":@"dummypassword"};
NSString *URLString = @"https://www.webaddress.com/index.php?ACT=71";
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^( id<AFMultipartFormData> parameters ){} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
答案 0 :(得分:4)
在AFNetworking 2.1中,您可以创建AFHTTPRequestOperationManager
作为实例变量,在视图控制器的viewDidLoad
(或对象中的设置方法)中初始化它,设置请求序列化程序,然后通过实例变量发出请求。
工作示例:
// Creation
-(void)setup {
url = [NSURL URLWithString:kMediaURLString];
manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
}
...
-(void)makeRequestWithObject:(id)obj {
// Create your parameters
NSDictionary *params = @{ @"someParameter" : obj };
// Create a path (relative to your manager's baseURL)
NSString *urlString = [NSString stringWithFormat:kCreatePath, postPath];
// Post the request to urlString with params, handle success or failure
[manager POST:urlString
parameters:params
success:^(AFHTTPRequestOperation *operation, id success){
// Do stuff on success
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// Do stuff on failure
}];
}
答案 1 :(得分:0)
我没有按照你的方式使用AFNetworking,但我猜你的问题与服务器不知道它应该发送JSON响应有关。您可以将'accept'标题更改为'application / json'。
看看this AFNetworking教程,它对我帮助很大:))
答案 2 :(得分:-1)
你可以像这样使用AFNetworking。
AFHTTPClient *httpClient = [[AFHTTPClient alloc] init];
NSDictionary *parameter = @{@"username":@"dummyusername", @"password":@"dummypassword"};
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient postPath:@"https://www.webaddress.com/index.php?ACT=71" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Print the response body in text
BOOL *success = [[responseObject objectForKey:@"success"] boolValue];
NSLog(@"Response: %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[self handleConnectionError:error];
}];