AFNetworking,AFHTTPRequestOperationManager 操作失败,代码为 200

Posted

技术标签:

【中文标题】AFNetworking,AFHTTPRequestOperationManager 操作失败,代码为 200【英文标题】:AFNetworking, AFHTTPRequestOperationManager failing on operation when it's a 200 code 【发布时间】:2015-10-08 10:37:09 【问题描述】:

最近遇到了 AFNetworking 的奇怪问题。我有一个 php 后端,我正在使用 SLIM 框架。正在发生的事情的简化示例:如果我使用链接 http://xxx.xxx.xx.xx/InstaAPI/hi,则应该调用它:

$app->get('/hi', function() use($app)  

    $app->response->setStatus(200);
    echo "hiiii\n";
);

现在在我的 Objective-C 代码中:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:@"http://xxx.xxx.xx.xx/InstaAPI/hi" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) 
        NSLog(@"ok");
        NSLog(@"%@",responseObject);
     failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) 
        NSLog(@"fail");
        NSLog(@"%@", operation.responseString);
    ];

我在输出控制台中得到的结果是:

015-10-08 18:30:20.650 iReporter[12822:3214201] fail
2015-10-08 18:30:20.650 iReporter[12822:3214201] hiiii

不知道它为什么调用失败块。状态毕竟设置为200,所以应该没问题。有人可以指点一下我在这里可能做错了什么吗?

【问题讨论】:

您是否尝试过从故障块中注销错误?它可能会对此有所了解 啊谢谢伙计。有点新手所以没想过那样检查。出现问题,因为标头设置为 JSON。如果你看到我的回声“hiiii\n”;这不是 JSON 响应。出于某种原因,我认为我可以使用分散的回声进行调试。如果设置为 JSON 显然不能全部使用。 【参考方案1】:

我自己来回答这个问题。结果很简单。我的标题设置为'Content-Type', 'application/json'echo "hiiii\n"; 这行不是 JSON,所以我不得不使用:

$response = array("Response"=>"HI!");
$echo json_encode($response);

我收到此类错误的原因是因为我试图通过在愚蠢的地方分散回声来调试代码,以检查我的 PHP 脚本中的执行位置。故事的寓意,如果您的标头设置为 JSON,请不要使用单个回显!

【讨论】:

以上是关于AFNetworking,AFHTTPRequestOperationManager 操作失败,代码为 200的主要内容,如果未能解决你的问题,请参考以下文章

IOS AFN请求 总结

从 AFNetworking 1.3 迁移到 AFNetworking 2.0 的问题

ios基础篇(三十)—— AFNetworking的使用

iOS开发网络数据之AFNetworking使用

如何在旧的 AFNetworking 中使用 AFNetworking 2.0+?

无法识别的选择器发送到 UIButton+AFNetworking.h 的实例(UIImageView+AFNetworking 也是)