38

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

这是返回的错误:

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

错误是否可能在服务器脚本中?

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

- (void) putData:(NSString *)parameter valor:(NSString *)valor {

    NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, 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);
}
4

3 回答 3

34

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

例如:

    { "response" : "Success" }

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

于 2013-01-05T11:32:25.530 回答
10

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

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

所以,无论你的服务器返回什么都不是。

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

通过使用 ,

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
于 2015-05-13T09:17:09.000 回答
1

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

于 2014-07-15T12:20:57.577 回答