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 获取时,它会在 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 回答