0

我有一个小问题。我正在尝试使用 php 和 Json 从外部数据库中检索信息。如果我从 localhost 尝试,它可以工作,但如果我修改 URL 并放置外部 URL,它不会返回任何内容。简而言之,如果我在本地工作(xampp 和 phpmyadmin)工作,我会从数据库中返回人口,但如果我尝试从外部数据库中进行,则不起作用。代码有问题吗?如果我运行托管在外部服务器上的 php 脚本,它会返回数据。这是Objective-C代码的问题

//Método que devuelve las poblaciones

-(NSMutableArray * )obtenerPoblaciones
{
pobla = [[NSMutableArray alloc] init];  

URLpobalciones = @"http://deproba.netau.net/devolver_poblaciones.php";
NSURL *url = [NSURL URLWithString:URLpobalciones];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;
NSArray *items = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions     error:&error];


NSDictionary *item = [[NSDictionary alloc] init];
// This will print all the names of people in your JSON.
for (item in items)
{
    NSString *poblae =[NSString stringWithFormat:[item valueForKey:@"nombre"]];
    [pobla addObject:poblae];
}

return pobla;

}


修改

再一次问好!我修改了代码。我想得到一些简单的东西,然后让它变得更复杂。我修改了php脚本和objective-c代码

PHP 文件

<?php
header('Content-type: application/json');
$miArray = array(utf8_encode("París")=>"Francia", "Madrid"=>utf8_encode("España"));
echo(json_encode($miArray));
?>

目标 C 代码

//NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?q=g8production"];
NSURL *url = [NSURL URLWithString:@"http://prueba.vacau.com/php/prueba.php"];
NSData *jsonData = [NSData dataWithContentsOfURL:url];

if (jsonData != nil) {
    NSError *error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:jsonData options:    (NSJSONReadingMutableContainers) error:&error];
    if (error == nil) {
        NSLog(@"Poblacion %@",result);
    }else
    {
        NSLog(@"jsonData  is empty");
    }
}

如果我使用 URL (http://search.twitter.com/search.json?q=g8production),它可以正常工作,但如果我使用我的 php 脚本则不起作用。使 if / else 语句打印:jsonData is empty 希望你能帮助我。再次感谢!

4

2 回答 2

0

目前我不能写评论,所以它必须是一个答案。我同意。您的代码似乎没问题,问题一定与您的服务器脚本有关。

但关于我所看到的:

pobla = [[NSMutableArray alloc] init]; 

如我所见,这一定是 iVar。请改用访问器。不要直接使用 iVar 的名称。如果您的项目中没有启用 ARC,则可能是内存泄漏。在通过保留属性设置后使用自动释放。

然后我不明白你为什么使用这个:

NSDictionary *item = [[NSDictionary alloc] init];
// This will print all the names of people in your JSON.
for (item in items) {...}

如果您正在考虑快速枚举,您可以编写:

for (NSDictionary *item in items) {...}

您不需要显式分配您正在枚举的对象。它们已经存在于 items 数组中。

于 2012-05-29T09:57:07.040 回答
0

有用!我发现了错误,试图在 jsonlint.com 上验证 JSON 问题是免费托管。添加广告和 JSON 验证器会告诉您 JSON 格式不正确。我在真实主机上进行了测试,并且可以正常工作。控制台显示您从 PHP 获得的 JSON 值 谢谢大家!你很酷

于 2012-05-30T11:25:20.297 回答