0

JSON オブジェクトを PHP から Javascript に渡そうとしています。オブジェクトは SQL データベースから入力されています。ここでは、私が使用している PHP コードを示します。

<?php
    $conn = mysql_connect("localhost","root","");
    if(! $conn )
    {
         die('Could not connect: ' . mysql_error());
    }
    mysql_select_db('db') or die( 'Error'. mysql_error() );
    $query = "SELECT * FROM products;";
    $results = mysql_query($query, $conn);
    $return = array();

    while($result = mysql_fetch_assoc($results))
    {
        $mount = array('product_code' => $results['product_code'], 'colour'  =>    $results['colour'], 'price' => $results['price']);
        array_push($return, $mount);
    }

    return json_encode($return);
?>

いくつかの変数名を変更しましたが、同じ機能があります。

この .php ファイルに対して AJAX Get を実行しようとすると、以下に示す JSON.Parse 部分コードでクラッシュします。

$.get("JSON.php", function(data) {
    var JSONdata = JSON.parse(data);
    alert(JSONdata[0].colour);
});

私のアラートはテストのためだけにあります。問題が $return 配列の構築にある可能性があることを理解しています。JSON は初めてなので、どんな助けでも大歓迎です。

編集:以下からすべての情報を取得して、PHPコードをそのように修正しました。

<?php
    $conn = mysql_connect("localhost","root","");
    $error = array("result" => false, "error" => mysql_error());

    if(! $conn )
    {
        die(json_encode($error));
    }
    mysql_select_db('db') or die(json_encode($error));
    $query = "SELECT * FROM products;";
    $results = mysql_query($query, $conn);
    $return = array();

    while($result = mysql_fetch_assoc($results))
    {
        $mount = array('product_code' => $result['product_code'], 'colour'  => $result['colour'], 'price' => $result['price']);
        array_push($return, $mount);
    }

    echo json_encode($return);
?>

mysql_* 関数をより互換性のある新しいバージョンに変更することを検討しています

4

1 に答える 1

4

PHP スクリプトの最後で「return」を使用している場合は、json でエンコードされた文字列をエコーし​​ます。

echo json_encode($return);

また、contenttype ヘッダーを application/json に設定することをお勧めします。


編集:

スクリプトが失敗した場合は、die('error'.mysql_error()); を使用します。
これは ajax 呼び出しへの応答でもありますが、json への応答ではなく、parse 関数は例外をスローします。
代わりに、次のような json オブジェクトを返すことをお勧めします。

 $error = array("result" => false, "error" => mysql_error());
 die(json_encode($error));

また、コメントに記載されているように、mysql_* 関数を使用しないでください。これらは、以降の php バージョンでは非推奨であり、将来のリリースではすべて一緒に php から削除されます。
mysqli または PDO をチェックしてください。

于 2013-09-17T09:14:06.117 に答える