从 AFNetworking 获取非 json 内容

Posted

技术标签:

【中文标题】从 AFNetworking 获取非 json 内容【英文标题】:Get non-json content from AFNetworking 【发布时间】:2014-04-16 01:00:21 【问题描述】:

我试图简单地获取显示在结果页面中的文本,但看起来这段代码被剪断只是专门针对 JSON。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @@"userId": [loggedParent getObjectID];
[manager POST:@"http://myurl" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
  NSLog(@"JSON: %@", responseObject);
   failure:^(AFHTTPRequestOperation *operation, NSError *error) 
       NSLog(@"Error: %@", error);
   ];

这是我得到的错误:

Error Domain=NSCocoaErrorDomain Code=3840 “操作无法完成。(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。) UserInfo=XXXXXXXXX NSDebugDescription =JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。

如何修改我的代码以简单地读取和保存显示的文本?

【问题讨论】:

NSLog 语句显示responseObject 的输出是什么? 它永远不会到达那个点,它会直接进入带有上述消息的失败块。 您的服务器响应的内容类型是什么?该错误表明它是 JSON mime-type 但不是有效的 JSON 【参考方案1】:

我假设您使用的是 AFNetworking 2.0,但我实际上并没有使用过。但看起来您应该能够修改 AFHTTPRequestOperationManager 中的 responseSerializer 属性以接受服务器发送的任何内容类型。 AFHTTPResponseSerializer 有一个可以修改的可接受内容类型字段。

但是,鉴于您看到的错误,似乎服务器可能正在返回“application/json”内容类型,但实际上并未提供有效的 JSON 内容。

【讨论】:

这就是问题所在。它实际上期待 JSON 作为回报。我将用我使用的内容更新我的原始代码。

以上是关于从 AFNetworking 获取非 json 内容的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking:从 Http 响应中获取 JSON 值

从 AFNetworking 获取 JSON 文件或信息

通过 AFNetworking 从服务器获取 Json 响应

AFNetworking 2.0 从故障块中的代码 400 获取 JSON

如何从 AFnetworking 2.0 操作/NSURLSessioNDataTask 获取原始 JSON 响应?

AFNetworking + JSON 并获取服务器状态