使用jQuery通过Ajax返回JSON

时间:2013-09-18 13:35:53

标签: php jquery json

我正在尝试从PHP页面获取JSON,但总是收到'undefined'。

我的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);

3 个答案:

答案 0 :(得分:3)

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

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


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

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

答案 1 :(得分:1)

首先你对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();

答案 2 :(得分:-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) {
                    ... 
                }
            }
        );