我正在尝试使用ASIHttpRequset解析JSON 我写了这段代码
-(void) tryASIHttpRequest{
NSString *phpUrl = @"http://www.myURL.com/subfolder/myFile.php";
NSString *dbName = @"dbName";
NSString *localHost = @"localhost";
NSString *dbUser = @"dbUser";
NSString *dbPwd = @"password";
NSString *S_user_id = [NSString stringWithFormat:@"%d",u_id0];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURL *link = [NSURL URLWithString:[phpUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link];
[request setRequestMethod:@"POST"];
[request setPostValue:dbName forKey:@"dbName"];
[request setPostValue:localHost forKey:@"localHost"];
[request setPostValue:dbUser forKey:@"dbUser"];
[request setPostValue:dbPwd forKey:@"dbPwd"];
[request setPostValue:S_user_id forKey:@"user_id"];
[request setPostValue:@"" forKey:@"submit"];
[request setTimeOutSeconds:120];
[request setDelegate:self];
NSError *error = [request error];
[request startAsynchronous];
if (!error) {
NSData *response = [request responseData];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSArray *statuses = [parser objectWithString:json_string error:nil];
for (NSDictionary *status in statuses)
{
NSString *bo_id2 = [status objectForKey:@"bo_id"];
NSString *bo_name2 = [status objectForKey:@"bo_name"];
NSLog(@"from server using ASIHttpRequest");
NSLog(@"bo_id: %@ - bo_name: %@", bo_id2, bo_name2);
}
}else{
NSLog(@"ASIHttp Error: %@", error);
}
}
在bookOwn.php中我写了以下内容
<?php
if (isset($_POST['submit'])) {
$dbName = $_POST['dbName'];
$localHost = $_POST['localHost'];
$dbUser = $_POST['dbUser'];
$dbPwd = $_POST['dbPwd'];
$user_id = $_POST['user_id'];
$con = mysql_connect($localHost,$dbUser,$dbPwd);
$db_found = mysql_select_db("iktab_book");
mysql_query('SET CHARACTER SET UTF8');
mysql_query("SET NAMES utf8; ");
$check = mysql_query("SELECT * FROM d_book where bo_id IN (Select Distinct(sal_bo_id) From d_sales Where sal_user_id =" . $user_id . ")");
while($row=mysql_fetch_assoc($check))
$output[]=$row;
$json_encode =json_encode($output);
$utf8_decode = utf8_decode($json_encode);
echo $json_encode;
mb_convert_encoding($json_encode, 'UTF-8');
$html_entity_decode = html_entity_decode($json_encode);
mysql_close();
}
?>
如果代码没问题,将打印此行
from server using ASIHttpRequest
但它没有打印,我无法确定我的代码中有什么问题。 有帮助吗? 在此先感谢。
答案 0 :(得分:0)
看起来您正在执行异步请求[request startAsynchronous];
,然后检查下一行以查看是否有数据。异步意味着它将在以后执行。通常会有一个成为请求的委托,以便在请求完成加载时收到通知。
更多按:
不要使用ASIHTTPRequest。 It has been deprecated by its author。请注意website上的横幅,建议使用其他内容
对于其他网址框架AFnetworking很受欢迎。
NSURLConnection也不是那么糟糕。
最后,如果您的目标是iOS 5或更高版本(并且没有太多理由支持更少),您不再需要SBJSON。操作系统提供NSJSONSerialisation
,用于将JSON转换为对象,然后再返回。