0

我尝试了很多东西,但不知何故无法弄清楚 ios 中 HTTP POST 请求的基础知识。有时我会收到服务器错误,有时我会收到状态代码 200 但响应为空。后端服务器代码正常工作,它正在发送 json 数据作为响应。不知何故,我的 ios 应用程序无法获得该响应。任何帮助将不胜感激!

这是我尝试过的事情之一!GetAuthorOfBook 对应于一个接受 strBookName 作为 POST 参数并将作者姓名作为 json 对象返回的 php 服务器函数!

NSURL *url = [NSURL URLWithString:@"http://mysite.com/getAuthorOfBook"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *post = [NSString stringWithFormat:@"strBookName=Rework"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];


[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[request setValue:@"text/html" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData ];

 //get response
 NSHTTPURLResponse* urlResponse = nil;  
 NSError *error = [[NSError alloc] init];

 NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

responseData 应该具有作者的姓名(strAuthorName)作为 json "key":"value" 对。

4

1 回答 1

1

responseData 还不是 json 对象。首先你需要序列化它并将它分配给一个 NSDictionary,然后你可以按键解析它。

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

现在您应该可以通过以下任一方法访问 authorName(如果它只是 json 中的字符串):

NSString *authorName = [json objectForKey:@"strAuthorName"];

或者像这样,如果它是一个对象字典(json中的一个对象数组)

NSDictionary *authorName = [json objectForKey:@"strAuthorName"];
于 2012-09-10T12:24:26.920 回答