cocoa错误3840使用JSON(iOS)

我试图发送数据到服务器,并以JSON格式接收响应。 问题是,服务器必须返回“成功”或“失败”,但它返回“(空)”。

这是返回的错误:

错误域= NSCocoaErrorDomain代码= 3840“该操作无法完成(cocoa错误3840.)”(JSON文本没有开始与数组或对象和选项,以允许片段没有设置)UserInfo = XXXXXXXXX {NSDebugDescription = JSON文本没有开始数组或对象和选项,以允许片段没有设置。}

是否有可能是在服务器脚本中的错误? 任何想法? 谢谢!

这是我的function发送数据和接收响应:

- (void) putData:(NSString *)parametre valor:(NSString *)valor { NSString *rawString = [NSString stringWithFormat:@"%@=%@", parametre, valor]; NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"PUT"]; [request setHTTPBody:data]; NSURLResponse *response; NSError *error; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; NSLog(@"responseData: %@ error: %@", json, error); } 

除非您将选项NSJSONReadingAllowFragments传递给[NSJSONSerialization JSONObjectWithData:options:error:] ,否则来自服务器的响应必须是具有顶级容器(数组或字典)的有效JSON。

例如:

  { "response" : "Success" } 

PS如果你想要一个可变的字典,你还必须在你的选项中包含NSJSONReadingMutableContainers

有可能,你的服务器的响应不包含有效的JSON。

从技术上讲,JSON对象必须以“数组”或“对象(字典)”开头。

所以,不pipe你的服务器返回的是不是。

而且,无论使用NSJSONReadingAllowFragments选项,您都可以强制使用JSON。

通过使用 ,

 AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 

如果您在iOS设备上连接到VPN,则可能会遇到此问题。