这个 AFNetworking JSON 帖子我做错了啥?
Posted
技术标签:
【中文标题】这个 AFNetworking JSON 帖子我做错了啥?【英文标题】:What am I doing wrong with this AFNetworking JSON Post?这个 AFNetworking JSON 帖子我做错了什么? 【发布时间】:2013-09-04 03:54:57 【问题描述】:我有一个奇怪的问题...我正在使用 AFNetworking 针对 Rails 服务器执行此 ios http/json 帖子,预期输出类似于:
"success":true,"auth_token":"4D8CyUsyGZdqo6X1TCeq"
有时它会按预期工作,但通常在 Rails 端,请求不会被检测为“JSON”请求,因此它提供 html。有人对此有想法吗?在设置 JSON 请求方面我做错了什么吗?
NSDictionary *parameter = @@"email":@"philswenson@mymail.com", @"password":@"mypassword";
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient postPath:@"api/v1/sessions" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject)
NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Here is what we got %@", jsonString);
NSDictionary *loginResult = [jsonString objectFromJSONString];
NSNumber* success = [loginResult objectForKey:@"success"];
NSLog(@"success = %@", success);
NSLog(@"yay");
// sample output:
// "success":true,"auth_token":"4D8CyUsyGZdqo6X1TCeq"
failure:^(AFHTTPRequestOperation *operation, NSError *error)
[self handleConnectionError:error];
];
【问题讨论】:
【参考方案1】:我知道我的服务,我需要将 application/jsonrequest 添加到我的参数中,如下所示:
NSDictionary *parameter = @@"email":@"philswenson@mymail.com", @"password":@"mypassword", @"accept:application/jsonrequest";
AFJSONParameterEncoding 只告诉它以 JSON 文件的形式发送参数。我需要发送一个参数来告诉它如何发回数据。
【讨论】:
【参考方案2】:添加:
[httpClient setDefaultHeader:@"Accept" value:@"application/json"];
【讨论】:
【参考方案3】:我尝试了建议 - 没有骰子.... setDefaultHeader 实际上导致了崩溃(无论 iOS 术语是什么访问冲突)...
“accept:application/jsonrequest” 没看出有什么区别...
我最终使用了这段代码:
NSDictionary *parameter = @@"email" : @"phil@gmail.com", @"password" : @"mypw", @"format":@"json";
【讨论】:
以上是关于这个 AFNetworking JSON 帖子我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章
如果值仅包含数字,AFNetworking 不会返回 NSString
将块中异步接收的 JSON 对象传递给实例变量 - 在 iOS6 上使用 AFNetworking