在页面加载中,我正在调用此函数
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) output [["2","2","2014-11-01 01:00:00"],["3","2","2014-11-01 04:00:00"]]
但似乎这里的所有内容都被视为数组元素或字符串。这段代码有什么问题?
答案 0 :(得分:4)
你还没有告诉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()));
}
答案 1 :(得分:1)
JavaScript函数.length正在计算整个序列化数组字符串的长度。你需要先解析它:
.done(function( show_list ) {
var data = JSON && JSON.parse( show_list ) || $.parseJSON( show_list );
console.log( data.length );
});
谢谢,
安德鲁