繁体   English   中英

PHP json_encode函数不适用于ajax调用

[英]PHP json_encode function is not working on ajax call

在页面加载中,我正在调用此函数

function myFunction(selectedCinemaID) {    
    $.ajax({
        type: "POST",
        url: "show_details.php",
        data: {cinema_id: selectedCinemaID }
    }).done(function( show_list ) {
        console.log(show_list.length);

    });

还有我在show_details.php中的代码

$query = "SELECT * FROM `show` WHERE cinema_id=2;";
    $result = mysql_query($query);

    if($result){
        $show_list = array();
    while($row = mysql_fetch_array($result)){
        array_push ($show_list, array($row['id'], $row['cinema_id'], row['show_time']));   
    }
    echo json_encode($show_list);        
    } else {
        echo mysql_error();
    }

在我的数据库中,我只有两行三列,但是控制台中显示的长度为64。但是根据数据库的长度应该为console.log(show_list) output [["2","2","2014-11-01 01:00:00"],["3","2","2014-11-01 04:00:00"]]但似乎这里的所有内容都被视为数组元素或字符串。 该代码有什么问题?

您没有告诉jquery您正在发送JSON。 这样,它将服务器发送的json文本视为文本。 那意味着

    console.log(show_list.length);

输出的是json字符串的长度,而不是您在PHP中构建的数组的数量/大小。

你需要

$.getJSON(....);

要么

$.ajax( 
    dataType: 'json'
    ...
)

但是,请注意,如果您的mysql查询由于任何原因而失败,则按原样输出mysql错误消息会在jquery中导致错误-它将使用JSON,并且您可能会向其发送mysql错误消息,这是绝对不是json。

切换到JSON模式后,除了json之外,请勿发送任何其他内容:

if (query ...)
    output json results
} else {
    echo json_encode(array('error' => mysql_error()));
}

JavaScript函数.length正在计算整个序列化数组字符串的长度。 您需要先解析它:

.done(function( show_list ) {
    var data = JSON && JSON.parse( show_list ) || $.parseJSON( show_list );
    console.log( data.length );
});

谢谢,

安德鲁

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM