通过post获取json时遇到的一个奇怪的问题
我是用post连接学校的tomcat服务器,源码如下:
//返回一个json字符串的
-(NSString*)getAPI:(NSString*)api_url withPost:(NSString*)post_data{
//post提交的参数,格式如下:
//参数1名字=参数1数据&参数2名字=参数2数据&参数3名字=参数3
NSString *post = [NSString stringWithFormat:post_data];
//将NSSrring格式的参数转换格式为NSData,POST提交必须用NSData数据。
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacChineseSimp);
NSData *postData = [post dataUsingEncoding:enc allowLossyConversion:YES];
//计算POST提交数据的长度
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
//定义NSMutableURLRequest
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
//设置提交目的url
[request setURL:[NSURL URLWithString:api_url]];
//设置提交方式为 POST
[request setHTTPMethod:@"POST"];
//设置http-header:Content-Length
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
//设置需要post提交的内容
[request setHTTPBody:postData];
//定义
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSError alloc] init];
//同步提交:POST提交并等待返回值(同步),返回值是NSData类型。
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
//将NSData类型的返回值转换成NSString类型
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"request : %@",request);
NSLog(@"post data : %@",post_data);
NSLog(@"json data : %@",result);
return result;
}
问题很奇怪:我post数据是id=1&page=1的时候返回正常,但是id=1&page=2的时候就返回null了。。。
是不是服务器的问题?但是我用python测试了一下api没有问题。。
而且前面有个安桌版本,就是用的这个api。。。无奈了,想问问大家有没有遇到过类似的问题?
[解决办法]
很好的理由,不错,但是NSString?*result?=?[[NSString?alloc]?initWithData:responseData?encoding:NSUTF8StringEncoding];??
???这句话responseData在你这段代码中没有看到有声明
另外 如果服务器返回的null给你那还是说有返回字符串"null",如果服务器什么也没有返回,那控制台会没有输出,即使这个差别很小,但是你的表达仍然非常令人不想回答,问问题技能=-1
[解决办法]
你在NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 这里断点看下, 是否responseData为nil, 如果为nil, 看看error里面的信息. 注意看看是否是编码转换导致的nil.