1

PHPからのデータを表示するiPhoneアプリケーションを開発しています。データは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 に答える