1

我正在开发一个 iPhone 应用程序来显示来自 php 的数据。数据从 Mysql 数据库中获取,然后在 php 文件中编码为 JSON 格式:

include_once 'connectionIncl.php';

if(function_exists($_GET['method'])){
    $_GET['method']();

}
function getSQLIntoJSONFormat()
{
    $arr;
    $sql = mysql_query("SELECT * FROM pecivo");
    while($pecivo = mysql_fetch_assoc($sql)){
        $arr[] = $pecivo['typ'];
    }
    $arr= json_encode($arr);
    echo $_GET['jsoncallback'].'('.$arr.')';
}

// --- http://127.0.0.1:8887/TeplyRohlik/pecivo.php?method=getSQLIntoJSONFormat&jsoncallback=?

当我从浏览器运行它时,它返回正确的数据:

(["sejra","knir","baba","vousy","sporitelna25"])

此外,在 iOS 上有此代码:

NSString * urlString = [NSString stringWithFormat:@"http://192.168.0.10:8887/TeplyRohlik/pecivo.php?method=getSQLIntoJSONFormat&jsoncallback=?"];
NSURL * url = [NSURL URLWithString:urlString];
NSData * data = [NSData dataWithContentsOfURL:url];
NSError * error;
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@",json);

结果是.... ( null)。我不知道如何让这个工作......

4

1 回答 1

2

看起来您的 PHP 方法正在吐出JSONP。您可能想要做的是将其更改为:

function getSQLIntoJSONFormat()
{
    $arr;
    $sql = mysql_query("SELECT * FROM pecivo");
    while($pecivo = mysql_fetch_assoc($sql)){
        $arr[] = $pecivo['typ'];
    }
    $arr= json_encode($arr);
    echo $arr;
}

您看到输出被括在括号中,因为它期望在调用的请求中有一个 GET 参数,jsoncallback这将使输出看起来像这样:

javascriptFunction(["a","b","b"])

这不是您想要的 iOS 设备。您只需要数组的原始 JSON 字符串,而不需要包装在回调函数调用中。

于 2012-07-21T17:20:12.167 回答