ios5:使用POST将JSON数据从iPhone发送到REST

时间:2012-06-28 21:10:10

标签: json ios5 http-post

我正在尝试将JSON格式的数据发送到REST API。发送参数时,Web服务不会返回任何数据,而是会出现以下错误:解析JSON时出错:Error Domain = NSCocoaErrorDomain Code = 3840"操作无法完成。 (可可误差3840。)" (JSON文本不以数组或对象和选项开头,以允许未设置片段。)

这是因为Web服务无法读取参数。 但是,如果我将此参数直接添加到URL,则会返回正确的结果,例如:http:// localhost:8080 / de.vogella.jersey.final / rest / notes / 63056

以下是发送参数的代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost:8080/de.vogella.jersey.final/rest/notes/"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

    NSString *postString = @"{\"notes\":\"63056\"}";
    NSLog(@"Request: %@", postString);
   // NSString *postString = @"";


    [request setValue:[NSString stringWithFormat:@"%d",[postString length]] forHTTPHeaderField:@"Content-length"];
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];




    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
    NSLog(@"Return Data%@",returnData);


    //Getting the task types from the JSON array received  
    NSMutableArray *jsonArray =[NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
    NSLog(@"jsonArray is %@",jsonArray);
    taskTypes =[[NSMutableArray alloc]init ];
    if (!jsonArray) {
        NSLog(@"Error parsing JSON: %@",error);
    } else {
        for(NSDictionary *taskType in jsonArray) {


            [taskTypes addObject:[taskType objectForKey:@"TaskName"]];
        }

    }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的错误“JSON文本没有以数组或对象开头,而选项允许未设置片段”可能意味着两件事:

  1. 您指定您希望响应对象采用JSON格式而不是(例如,如果您使用AFJSONRequestOperation并且服务器返回JSON以外的其他内容,则会发生这种情况)
  2. 修复:获取服务器代码并确保它返回有效的JSON对象

    1. 您没有指定收到JSON以外的其他内容
    2. 修复:如果您正在使用AFNetworking,请在AFHTTPClient的子类中将NSJSONReadingAllowFragments传递给[NSJSONSerialization JSONObjectWithData:options:error:](为此答案喊出Cocoa error 3840 using JSON (iOS)