我无法使用这种方法获取数据,但是在使用其他 url 时它可以工作,而且我还在 postman 中进行了测试,我得到了响应。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// if you want to sent parameters you can use above code
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager GET"http://192.168.1.156:81/a.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"responseObject %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
错误:
“请求失败: Not Acceptable 内容类型:text/html” UserInfo=0x8a6b000 {NSErrorFailingURLKey=http://192.168.1.156:81/a.php, AFNetworkingOperationFailingURLResponseErrorKey= { URL: http://192.168.1.156:81/a.php } { 状态码:200,标题 { 连接=“保持事件”; “内容类型”=“文本/html”; 日期 =“格林威治标准时间 2014 年 5 月 20 日星期二 14:49:20”; “保活”=“超时=5,最大值=100”; 服务器 = "Apache/2.4.4 (Win64) PHP/5.4.12"; “传输编码” = 身份; "X-Powered-By"= "PHP/5.4.12"; } }, NSLocalizedDescription=请求失败: Not Acceptable 内容类型:text/html}
NSArray 转换错误:
Parsing JSON failed: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid escape sequence around character 4677.) UserInfo=0xa82c130 {NSDebugDescription=Invalid escape sequence around character 4677.}
Parse error on line 258: ... "story_title": "today\'s story", -----------------------^ Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
您的错误消息告诉您 AFNetworking 期待 JSON 响应(即响应 header 的 Content-Type
应该是 application/json
并且响应的正文应该是实际的 JSON)。
这里有多种可能性之一:
您的服务正在返回 JSON 正文,但忽略指定 Content-Type
header 。在您的 PHP 代码中,在发送任何数据之前,指定 Content-Type
header :
header("Content-Type: application/json");
如果您无法修复 PHP(这是首选解决方案),您也可以告诉 AFNetworking 也接受 text/html
作为 Content-Type
。我没有对此进行测试,但类似下面的内容应该将 text/html
添加到默认 AFJSONResponseSerializer
的 acceptableContentTypes
集合中:
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject"text/html"];
您的 Web 服务并非旨在返回 JSON。在这种情况下,您应该配置 manager
以接受非 JSON 响应,例如:
mananger.responseSerializer = [AFHTTPResponseSerializer serializer];
您的 Web 服务旨在正确返回 JSON 响应,但遇到了一些程序错误,导致无法正确生成 JSON。在这种情况下,临时更改 manager
以接受非 JSON 响应(如上面的第 2 点),然后检查响应(当然,假设您已经配置了php.ini
报告错误):
NSLog(@"responseObject = %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding);
如果您看到的是 JSON,您可以使用 NSJSONSerialization
将其转换为数组:
NSError *error;
NSArray *array = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error];
if (!array) {
NSLog(@"arsing JSON failed: %@", error);
}
显然,您可以将这个本地 NSArray
对象保存到您想要的任何类属性或实例变量中。
您已使用 JSON 解析错误更新您的问题。这是 JSON 中 \
字符的结果。那是无效的。 (将您的 JSON 粘贴到 http://jsonlint.com 中,它会确认这一点。)您的 PHP 没有正确生成 JSON。删除 '
之前的那个 \
。只有在 JSON 中包含双引号时,才应使用此反斜杠转义。
坦率地说,您似乎手动创建了这个 JSON。使用 PHP 函数 json_encode
会更好,它会为您完成所有适当的转义,完全避免这类 JSON 错误。
关于ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762900/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |