簡體   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