从Xcode中的php文件中检索数据

时间:2014-03-06 12:53:53

标签: php ios json xcode

我尝试了不同的代码来发送和检索PHP文件中的数据,但我仍然无法正确获取结果 到目前为止,我得到的检索结果显示在输出调试器中(以json格式),但不是在Xcode模拟器中。好像我错过了什么!

- (void) retrieveData
{



NSString * jack=[GlobalVar sharedGlobalVar].gUserName;
NSLog(@"global variable %@", jack);



NSString *rawStr = [NSString stringWithFormat:@"StudentID=%@",jack];
NSData *data = [rawStr dataUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:@"http://m-macbook-pro.local/studentCourses.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];

NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSLog(@"responseData: %@", responseData);

  jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

// Search for the array parameter that should be added
 coursesArray=[[NSMutableArray alloc] init];
//set up our cities array

NSString *strResult = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"me: %@", strResult);



//loop through our json array

for (int i = 0 ; i <coursesArray.count; i++)
{
    NSString * cName = [[coursesArray objectAtIndex:i] objectForKey:@"CourseName"];

    //Add the City object to our cities array
    [coursesArray addObject:[[Course alloc]initWithCourseName:cName]];

}

//Reload our table view
[self.tableView reloadData];
}

在php文件中

echo json_encode($records);

1 个答案:

答案 0 :(得分:0)

看起来您正在使用发布数据创建json数组,而不是使用从服务器返回的responseData。

//change this
jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//to this
jsonArray=[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil];

此外,根据您发布的代码,您似乎不会将从服务器返回的结果添加到coursesArray中。在你创建cName的循环中,我认为你想要做的是从php调用(你的jsonArray)的结果中获取课程名称,并将它们添加到你的courses数组中。您设置的方式是从课程数组中获取结果并将其添加到自身。

尝试使用此代码进行for循环:

 for (int i = 0 ; i <jsonArray.count; i++)
 {
     NSString * cName = [[jsonArray objectAtIndex:i] objectForKey:@"CourseName"];

     [coursesArray addObject:[[Course alloc]initWithCourseName:cName]];

 }

根据您的代码,我假设coursesArray包含tableview的数据。

另请注意,在生产应用中使用同步请求并不是一个好主意,因为它们在主线程上运行并会阻止UI。