AFNetworking JSON 请求不起作用

Posted

技术标签:

【中文标题】AFNetworking JSON 请求不起作用【英文标题】:AFNetworking JSON request not working 【发布时间】:2013-06-30 15:41:40 【问题描述】:

我正在尝试启动此操作,但它甚至没有进入 NSLOG。 我猜它与我的 stringUrl 相关,也许它不应该像这样工作?

这是我的代码:

NSString *stringUrl = [[NSString alloc]initWithFormat:@"http://example.com/add_user.php?username=%@&password=%@&country=%@&email=%@",[self.usernameTextField text],[self.passwordTextField text], countrySelected, [self.emailTextField text]];

NSURL *url = [NSURL URLWithString:stringUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) 
    NSDictionary *dict = JSON;
    NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"item"]);
 failure:nil];

[operation start];

编辑: 这是我从故障块中得到的:

错误域=AFNetworkingErrorDomain 代码=-1016 "预期的内容类型 ( “文本/json”, “应用程序/json”, “文本/javascript” ), got text/html" UserInfo=0xa2b4300 NSLocalizedRecoverySuggestion="type":"1","item": "用户添加成功。" , AFNetworkingOperationFailingURLRequestErrorKey=http://EXAMPLE.com/add_user.php?username=aaasafasfasf&password=aaa&country=Angola&email=aaaasfasfasfasfasf>, NSErrorFailingURLKey=http://EXAMPLE.com/add_user.php?username=aaasafasfasf&password=aaa&country=Angola&email=aaaasfasfasfasfasf, NSLocalizedDescription=预期的内容类型( “文本/json”, “应用程序/json”, “文本/javascript” ),得到文本/html,AFNetworkingOperationFailingURLResponseErrorKey=

【问题讨论】:

使用 NSLog 获取 stringUrl 的值并粘贴到浏览器中,看看结果如何。 @edzio27 这是我得到的: "type": "0","item":"用户名已经存在 电子邮件已经存在 " 这是我想要得到的,但它甚至没有得到到 NSLog 你可以尝试使用失败块吗? 嗯,你需要将返回的内容类型设置为 text/json 或 application/json 而不是当前的 text/html:***.com/questions/919584/…。 AFNetworking 对内容类型非常严格,我相信 :) 不需要替换,可以在已有的header('Access-Control-Allow-Origin: *');行下面添加 【参考方案1】:

为了进入 AFJSONRequestOperation 的成功块,您还需要遵守服务器要发送的正确内容类型。当前,您的服务器正在返回 text/html 内容类型作为响应,因此它进入了失败块。

正如故障块消息所暗示的,将返回的内容类型更改为 text/jsonapplication/json,因为您使用的是 AFJSONRequestOperation。

对于 PHP,您可以按照此问题的答案更改返回的内容类型:How to change content type in php?

您只需在现有标题行下方添加一行:

header('Content-Type: text/json');

无需替换现有标题行,除非有标题行将内容类型设置为 text/jsonapplication/json 以外的其他内容。

【讨论】:

现在我遇到了另一个问题:Error Domain=NSCocoaErrorDomain Code=3840 “操作无法完成。(Cocoa 错误 3840。)”(字符 45 周围未转义的控制字符。) UserInfo=0xa361a40 NSDebugDescription=字符 45 周围未转义的控制字符。 我认为 NSURL 太长了。 @RotemShukron 您需要检查返回的 JSON 是否是有效的 JSON。你可以试试这里的建议:***.com/questions/6966349/json-parse-error

以上是关于AFNetworking JSON 请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking Post 请求不起作用

AFNetworking https 请求不起作用

obj-c AFNetworking 2.0 POST 请求不起作用

AFNetworking XML 请求问题

AFNetworking 3.0 后台上传不起作用

AFNetworking 帖子不起作用?