[英]Returning php associative array from function to ajax call with json_encode() not and object
[英]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.