首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

通过post获取json时遇到的一个奇怪的有关问题

2013-09-05 
通过post获取json时遇到的一个奇怪的问题我是用post连接学校的tomcat服务器,源码如下://返回一个json字符

通过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.

热点排行