2

我是 iOS 和 AFNetworking 的新手。我习惯了 Titanium 以及使用类似于 Javascript 中的 xhr 的模型发布和获取数据的非常简单的方法。我向我的服务器发送一个 Post 请求并取回 JSON。它在 Titanium 中完美运行,但我花了很长时间让它在本地工作。

在对 Titanium 的后端进行了一些研究之后,他们似乎正在使用 ASI,我觉得这很有趣。现在看来 AFNetworking 是替代方案,因为 ASI 不再更新。但是,当我在下面发送请求时,它会收到 text/html 响应而不是 JSON 响应。我猜这是因为参数以及它们的发送方式。

在另一个 StackOverflow 问题上,需要向服务器提供标准发布变量的人,而服务器用 JSON 响应,这正是我需要做的。建议是在您的 AFHTTPClient 中将“parameterEncoding 设置为 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);
}];
4

3 回答 3

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
          }];
}
于 2013-11-04T03:42:39.463 回答
0

我没有像您那样使用 AFNetworking,但我猜您的问题与服务器不知道它应该发送 JSON 响应有关。您可以将“接受”标头更改为“应用程序/json”。

看看这个 AFNetworking教程,它对我有很大帮助:)

于 2013-11-03T23:56:15.790 回答
-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];
}];
于 2013-11-04T03:33:19.177 回答