0

我正在尝试使用 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

但它不打印,我无法确定我的代码有什么问题。有什么帮助吗?提前致谢。

4

1 回答 1

0

看起来您正在执行异步请求[request startAsynchronous];,然后正在检查下一行以查看是否有数据。异步意味着它将在稍后执行。通常一个人会成为请求的代表,以便在请求完成加载时得到通知。

更多紧迫:

不要使用 ASIHTTPRequest。它的作者已弃用它注意网站上建议使用其他东西的横幅

For alternative URL frameworks AFnetworking is popular.

Also NSURLConnection isn't that bad.

And finally if you are targeting iOS 5 or higher (and theres not much reason to support less) you no longer need SBJSON. NSJSONSerialisation is provided by the OS for converting JSON into objects and back again.

于 2012-10-21T22:36:48.020 回答