我试图在本地服务器上调用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);
}];
}
我查看了整个互联网,但找不到我的具体问题的答案。 无论我做什么,我都会得到同样的错误。
为什么我的JSON格式不正确?我似乎也无法找到一种方法来嗅探我实际发送的JSON。
谢谢。
答案 0 :(得分:5)
当您在示例中使用API时,您的HTTP消息将使用内容类型application/x-www-form-urlencoded
来组成。在内部,您的param
字典由AFN编码(尽管不是严格按照w3c的规定更正),并设置为请求正文。
由于您未指定Accept
标头,因此服务器可以自由选择可能的响应数据(如果有)的内容类型。
收到回复后,您需要始终检查HTTP状态代码和响应正文的内容类型(如果有)。
可能是服务器返回了一个状态代码,表明存在某个问题,并且响应正文包含某种不同类型的内容类型的“错误响应”(例如,它返回了text / html)。
答案 1 :(得分:2)
你可以在模拟器中运行应用程序或在通过共享wifi连接到mac的设备上使用类似wireshark(http://www.wireshark.org/)的smth,你正在运行whireshark来跟踪实际的请求和响应。
答案 2 :(得分:2)
这对我有用:
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];
}];