AFNetworking 2.0 POST问题,cocoa错误3840(JSON文本没有开始数组…)

我试图调用我的本地服务器上的api.php(使用MAMP)。 正在调用服务器端api.php,但php代码中的_POST内容包含以下错误:

Error 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 = 0x15d7bdd0 {NSDebugDescription = JSON text did not start with array or object and option to allow fragments not set.} 

我尝试将JSON POST请求发送到api.php的应用程序是使用AFNetworking 2的iOS应用程序

这是我的请求代码:

 - (void)postUpdateRequest { if (!dataModel) dataModel = [[DataModel alloc] init]; NSDictionary *params = @{@"foo": @"bar2"}; NSLog(@"%@",params); /* NSDictionary *params = @{@"cmd":@"update", @"user_id":[dataModel userId], @"token":[dataModel deviceToken] };//@"ip_address":[dataModel getIPAddress]};*/ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager POST:ServerApiURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; } 

我看遍了互联网,但无法find我的具体问题的答案。 不pipe我做什么,我都会得到同样的错误。

为什么我的JSON格式不正确? 我也似乎无法find一种方法来嗅探我实际发送的JSON。

谢谢。

当你在你的例子中使用API​​时,你的HTTP消息将通过使用Content-Type application/x-www-form-urlencoded 。 在内部,你的param字典是由AFN编码的(虽然不像w3c指定的那样严格正确),并且设置为请求体。

由于您没有指定Accept头,因此服务器可以自由select可能的响应数据(如果有)的内容types。

当您收到响应时,您需要始终检查HTTP状态码和响应主体的内容types(如果有)。

很可能,服务器返回一个状态代码,指示某个问题,并在某种不同types的内容types中包含“错误响应”的响应主体(例如返回text / html)。

您可以在模拟器中运行应用程序时使用wireshark( http://www.wireshark.org/ ),或通过共享wifi连接到Mac上的设备上运行应用程序,以便跟踪实际的请求和响应。

这适用于我:

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer]; [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; manager.requestSerializer = requestSerializer; [manager POST:URLString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; }];