菜鸟教程小白 发表于 2022-12-12 16:23:19

ios - 在 AFJSONRequestOperation 中接受无效的 JSON?


                                            <p><p>我正在修复现有项目中的错误。问题是 AFHTTPClient 期望一个有效的 JSON 响应,但服务器返回一些像 ""\"Operation complete\""之类的乱码(所有引号和括号都在返回中)。这导致操作失败,并命中失败 block ,因为它无法解析响应。尽管如此,服务器正在返回状态码 200,并且很高兴操作完成。</p>

<p>我有一个像这样扩展 AFHTTPClient 的类(从我的 .h 文件中提取)</p>

<pre><code>@interface AuthClient : AFHTTPClient

//blah blah blah

@end
</code></pre>

<p>在我的实现文件中,类的初始化如下:</p>

<pre><code>- (id)initWithBaseURL:(NSURL *)url{
    if (self = ) {      
      self.parameterEncoding = AFFormURLParameterEncoding;
      self.stringEncoding = NSASCIIStringEncoding;

      ;
      ];
    }

    return self;
}
</code></pre>

<p>我正在调用的电话是在上面提到的类(class)中完成的,并且发生的情况如下:</p>

<pre><code>- (void)destroyToken:(NSString *)token onCompletion:(void (^)(BOOL success))completion onFailure:(void (^)(NSError *error))failure{

    [self postPath:@&#34;TheServerURL&#34; parameters:@{@&#34;token&#34;: token} success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSError *error;
      //Do some stuff
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      //Don&#39;t want to be here.
    }];
}
</code></pre>

<p>在失败 block 中,错误对象的 _userInfo 部分将返回错误:</p>

<p> (null) @"NSDebugDescription": @"JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。"</p>

<p>错误码是3480。</p>

<p>通过谷歌搜索,我发现我需要设置类似 NSJSONReadingAllowFragments 的东西,但我不确定当前设置的方式/位置。有人有什么想法吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>听起来响应根本不是 JSON。那么,为什么不直接接受 HTTP 响应本身,而不是尝试像 JSON 一样处理它呢?</p>

<p>如果您正在提交 JSON 格式的请求,但只想返回文本响应,则使用 AFNetworking 2.0 您可以执行以下操作:</p>

<pre><code>AFHTTPRequestOperationManager *manager = ;
manager.requestSerializer = ;
manager.responseSerializer = ;
[manager POST:urlString parameters:@{@&#34;token&#34;:token} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSString *responseString = [ initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@&#34;responseString: %@&#34;, string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@&#34;Error: %@&#34;, error);
}];
</code></pre>

<p>或者,在 1.x 中:</p>

<pre><code>AFHTTPClient *client = [ initWithBaseURL:baseURL];
client.parameterEncoding = AFJSONParameterEncoding;
NSMutableURLRequest *request = ;

AFHTTPRequestOperation *operation = [ initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSString *string = [ initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@&#34;response: %@&#34;, string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@&#34;Error: %@&#34;, error);
}];

;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 AFJSONRequestOperation 中接受无效的 JSON?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19965151/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19965151/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 AFJSONRequestOperation 中接受无效的 JSON?