IOS AFNetworking 使用时遇到的问题及解决方法
2014-12-16 10:32
246 查看
最近在做IOS项目的时候, 使用AFNetworking第三方库的时候,提交post请求一直出问题。网上的解决方法都比较杂乱,这里mark一下我最终的解决方法。
{NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.
大概意思也就是返回json数据格式不对。
让其接收json格式数据, 并设置readingAllowFragments。
这里采用manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];的时候也是不行,虽然manager.responseSerializer也是一个AFHTTPResponseSerializer对象。
post代码块:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"name" : @"1111", @"password" : password}; NSLog(@"%@", parameters); [manager POST:LoginURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"========>%@", error.debugDescription); }];
出现的错误:
Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x7fe238dc6ab0{NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.
大概意思也就是返回json数据格式不对。
解决方法:
指定其response的content-type,Json格式为application/json。方法1.
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
让其接收json格式数据, 并设置readingAllowFragments。
方法2.
AFHTTPResponseSerializer *s = [[AFHTTPResponseSerializer alloc] init]; s.acceptableContentTypes = [NSSetsetWithObject:@"application/json"]; manager.responseSerializer = s;
这里采用manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];的时候也是不行,虽然manager.responseSerializer也是一个AFHTTPResponseSerializer对象。
扩展:
如果你的服务器指定了content-type,解决方法如下:AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer]; [requestSerializer setValue:@"html/text"forHTTPHeaderField:@"Content-Type"]; [requestSerializer setValue:@"html/text"forHTTPHeaderField:@"Accept"]; manager.requestSerializer = requestSerializer;
相关文章推荐
- iOS 网络请求框架AFNetworking使用方法(欢迎提建议和分享遇到的问题)
- 使用IOS 10 / XCODE 8.1 遇到 libsystem_kernel.dylib`__abort_with_payload问题的解决方法
- cordova iOS 下插件的使用遇到的问题和解决方法
- 虚拟IP实验,遇到场景启用使用虚拟IP就报错,不启用可以正常运行的问题,解决方法
- 使用pbrt 1.03遇到的问题和解决方法
- 使用GridView时遇到的一些小问题及解决方法
- 使用密匙让putty(或ssh)自动登录Linux遇到几个问题的解决方法
- LoadRunner在使用时遇到的问题及解决方法
- ACE与C++/CLI集成使用时遇到的问题及解决方法
- [Nebula2]使用3dmax7,nmaxtoolbox导出模型到nebula2遇到的问题及解决方法
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- 使用VIM开发软件项目 - (16) vim编译中遇到的问题及解决方法
- Infragistics的NetAdvantage控件使用中遇到的问题及解决方法
- Java使用Oracle遇到的最大游标超出问题及其解决方法
- 使用pbrt 1.03遇到的问题和解决方法
- J2ME使用WTK模拟器开发时候遇到“OK to use Airtime” 问题的解决方法
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- Java使用Oracle遇到的最大游标超出问题及其解决方法
- 使用sliverlight时遇到的问题及解决方法
- Java使用Oracle遇到的最大游标超出问题及其解决方法