ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应
<p><p>我无法使用这种方法获取数据,但是在使用其他 url 时它可以工作,而且我还在 postman 中进行了测试,我得到了响应。</p>
<pre><code>AFHTTPRequestOperationManager *manager = ;
// if you want to sent parameters you can use above code
manager.requestSerializer = ;
[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) {
}];
</code></pre>
<p><strong>错误:</strong></p>
<pre>“请求失败: 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}
</pre>
<p><strong>NSArray 转换错误:</strong></p>
<blockquote>
<p>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.}</p>
<pre>Parse error on line 258:
... "story_title": "today\'s story",
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
</pre>
</blockquote></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您的错误消息告诉您 AFNetworking 期待 JSON 响应(即响应 header 的 <code>Content-Type</code> 应该是 <code>application/json</code> 并且响应的正文应该是实际的 JSON)。</p>
<p>这里有多种可能性之一:</p>
<ol>
<li><p>您的服务正在返回 JSON 正文,但忽略指定 <code>Content-Type</code>header 。在您的 PHP 代码中,在发送任何数据之前,指定 <code>Content-Type</code>header :</p>
<pre><code>header("Content-Type: application/json");
</code></pre>
<p>如果您无法修复 PHP(这是首选解决方案),您也可以告诉 AFNetworking 也接受 <code>text/html</code> 作为 <code>Content-Type</code>。我没有对此进行测试,但类似下面的内容应该将 <code>text/html</code> 添加到默认 <code>AFJSONResponseSerializer</code> 的 <code>acceptableContentTypes</code> 集合中:</p>
<pre><code>manager.responseSerializer.acceptableContentTypes = ;
</code></pre> </li>
<li><p>您的 Web 服务并非旨在返回 JSON。在这种情况下,您应该配置 <code>manager</code> 以接受非 JSON 响应,例如:</p>
<pre><code>mananger.responseSerializer = ;
</code></pre> </li>
<li><p>您的 Web 服务旨在正确返回 JSON 响应,但遇到了一些程序错误,导致无法正确生成 JSON。在这种情况下,临时更改 <code>manager</code> 以接受非 JSON 响应(如上面的第 2 点),然后检查响应(当然,假设您已经配置了<code>php.ini</code> 报告错误):</p>
<pre><code>NSLog(@"responseObject = %@", [ initWithData:responseObject encoding:NSUTF8StringEncoding);
</code></pre>
<p>如果您看到的是 JSON,您可以使用 <code>NSJSONSerialization</code> 将其转换为数组:</p>
<pre><code>NSError *error;
NSArray *array = ;
if (!array) {
NSLog(@"Parsing JSON failed: %@", error);
}
</code></pre>
<p>显然,您可以将这个本地 <code>NSArray</code> 对象保存到您想要的任何类属性或实例变量中。</p></li>
</ol>
<hr/>
<p>您已使用 JSON 解析错误更新您的问题。这是 JSON 中 <code>\</code> 字符的结果。那是无效的。 (将您的 JSON 粘贴到 <a href="http://jsonlint.com" rel="noreferrer noopener nofollow">http://jsonlint.com</a> 中,它会确认这一点。)您的 PHP 没有正确生成 JSON。删除 <code>'</code> 之前的那个 <code>\</code>。只有在 JSON 中包含双引号时,才应使用此反斜杠转义。 </p>
<p>坦率地说,您似乎手动创建了这个 JSON。使用 PHP 函数 <code>json_encode</code> 会更好,它会为您完成所有适当的转义,完全避免这类 JSON 错误。</p></p>
<p style="font-size: 20px;">关于ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23762900/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23762900/
</a>
</p>
页:
[1]