Javascript PHP json_encode函数不适用于ajax调用

Javascript PHP json_encode函数不适用于ajax调用,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,在页面加载中,我调用这个函数 function myFunction(selectedCinemaID) { $.ajax({ type: "POST", url: "show_details.php", data: {cinema_id: selectedCinemaID } }).done(function( show_list ) { console.log(show_list.length);

在页面加载中,我调用这个函数

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。但是根据数据库长度应该是2
console.log(show_list)输出[[“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(....);

但是,请注意,如果您的mysql查询因任何原因失败,那么按原样输出mysql错误消息将在jquery中导致错误-它将使用JSON,并且您可能会向它发送一条mysql错误消息,这肯定不是JSON

一旦切换到JSON模式,就不应发送JSON以外的任何内容:

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

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

    console.log(show_list.length);
正在输出json字符串的长度,而不是正在PHP中构建的数组的计数/大小

你需要其中之一

$.getJSON(....);

但是,请注意,如果您的mysql查询因任何原因失败,那么按原样输出mysql错误消息将在jquery中导致错误-它将使用JSON,并且您可能会向它发送一条mysql错误消息,这肯定不是JSON

一旦切换到JSON模式,就不应发送JSON以外的任何内容:

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

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

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


Andrew

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

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


Andrew

尝试将contentType:“application/json”属性添加到jquery.ajax的选项中,以强制响应编码。启用
错误报告
。contentType:“application/json”对此仍然会得到相同的结果添加contentType:“application/json”属性设置为jquery.ajax的选项,以强制响应编码。启用
错误报告
。contentType:“application/json”仍然会得到相同的结果