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/json 或 application/json,因为您使用的是 AFJSONRequestOperation。
对于 PHP,您可以按照此问题的答案更改返回的内容类型:How to change content type in php?
您只需在现有标题行下方添加一行:
header('Content-Type: text/json');
无需替换现有标题行,除非有标题行将内容类型设置为 text/json 或 application/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 请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章