1

我正在尝试从 PHP 页面获取 JSON,但总是收到“未定义”。

我的 jQuery 代码是:

<script>
    $(document).ready(function(){
        $("#lista_partecipanti").click(function(){
            $.post( "application/third_party/php_files/lista_partecipanti.php",
            { 
                user_id:<? echo $user_id; ?> , jam_id:<? echo $id_jam; ?>
            }, 
            function(data)
            {
                if(data) {
                    $("#div_lista_partecipanti").html('test' + data[0].username);
                }
                else
                {
                    alert("Error");                                     
                }
            });
        });
    });
</script>

我的 PHP 代码是:

<?php
include 'db_connect.php';

$a_id = $_POST['user_id'];
$b_id = $_POST['jam_id'];

$query = mysql_query("SELECT * FROM User a, Jam b WHERE a.id = b.owner AND a.id = $a_id AND b.id = $b_id");

if(mysql_num_rows() == 1) 
{
    $row = mysql_fetch_assoc($query);
    $data = array(
            'username' =>$row['username'],
            'user_id' => $row['id']
    );
    $data = json_encode($data);
    echo $data;    
}
else
    return false;

mysql_close();
?>

解决了

我解决了我的问题,这不是 PHP 问题,但错误在 jquery 代码中。我刚刚添加

data = $.parseJSON(data);

$("#div_lista_partecipanti").html(data.username);
4

3 回答 3

2

由于您没有另外指定,因此 PHP 将声称它正在输出 HTML 文档,而 jQuery 会将 JSON 视为 HTML。

header("Content-Type: application/json");在从 PHP 输出任何内容之前添加。


其次,您的 JSON 文本由单个对象组成,而不是对象数组。

data[0].username应该只是data.username

于 2013-09-18T13:38:56.173 回答
0

首先你对 mysql 注入非常开放,你应该使用mysqlipdo准备好的语句。

其次,您不应该在循环内回显 JSON,它不会那样工作,您需要将所有数据添加到数组中,然后json_encode在循环后将其返回,尽管对于您的示例,它只是一项但仍然如此。

<?php
include 'db_connect.php';
header("Content-Type: application/json");

$a_id = $_POST['user_id'];
$b_id = $_POST['jam_id'];

$query = mysql_query("SELECT * FROM User a, Jam b WHERE a.id = b.owner AND a.id = $a_id AND b.id = $b_id");

if(mysql_num_rows() >= 1) {
    $data = array();
    while($row = mysql_fetch_assoc($query)){
        $data[] = array(
            'username' =>$row['username'],
            'user_id' => $row['id']
        );
    }
    echo json_encode($data);
} else {
    echo json_encode([]);
}
mysql_close();
于 2013-09-18T13:45:25.263 回答
-1
        jQuery.ajax({
            type: "POST",
            url: "application/third_party/php_files/lista_partecipanti.php",
            data: "userid="+<?php echo $user_id; ?>+"&jam_id="<?php echo $id_jam; ?>,
            cache: false,
            success: function(response) {
                    ... 
                }
            }
        );
于 2013-09-18T13:44:15.717 回答