У меня есть этот код:

 <script>
    $(document).ready(function()
    {
        refresh();
    });

    function refresh()
    {      
        $.get('getMessageDetails.php', function (json) {
            alert(json);
            alert(json[0].subject);
        },"json");
        window.setTimeout(refresh,30000);
    }   
</script>

Тогда у меня есть getMessageDetails.php:

<?php
//header('Content-Type: application/json; charset=utf-8');
include('header_application.php');
$lastNewMessageCnt = $obj_clean->getUnopenedMessagesCount($_SESSION['user_id']) + 1;
$last_unopened_message_row = $obj_clean->getLastUnopenedMessage($_SESSION['user_id'],$lastNewMessageCnt); 
echo json_encode($last_unopened_message_row); 
?>

То у меня есть предупреждение (json), которое показывает:

[{"subject":"Freechat ddd","id":"19","created_at":"2011-08-29 14:58:27","unique_code":"ALLEYCA000RC","opened_once":"0"}] 

Что правильно

Но alert(json[0].subject); дает undefined ???

Пожалуйста помоги? благодарю вас

4
charlie_cat 29 Авг 2011 в 17:06

3 ответа

Лучший ответ

Если ваше первое предупреждение показывает то, что вы говорите, значит, содержимое вашей переменной json не обрабатывается как json - если бы это было так, вы бы увидели [object Object] в предупреждении. Проверьте здесь.

Поэтому вам нужно указать, что возвращается json (что вы и делаете); но вы также должны убедиться, что PHP отправляет правильные заголовки ответа. Перед отправкой вывода добавьте первую строку ниже:

header('Content-type: application/json');
echo json_encode($last_unopened_message_row); 
0
Majid Fouladpour 29 Авг 2011 в 13:32

Вам необходимо преобразовать переменную json, чтобы исправить переменную формата json.

В настоящее время это строковая переменная.

Вы должны использовать его следующим образом:

<script>
    $(document).ready(function()
    {
        refresh();
    });

    function refresh()
    {      
        $.get('getMessageDetails.php', function (json) {
            alert(json);  // this is a string variable.
            json = $.parseJSON(json);  //now json varible is in correct json format.
            alert(json.subject); //you can call it dirctly like a associative array. No need to include '[0]'.
        },"json");
        window.setTimeout(refresh,30000);
    }   
</script>
1
Pavan Agarwal 29 Авг 2011 в 13:27

Кажется, ваш JSON не анализируется правильно. Попробуйте вместо этого использовать getJSON.

$.getJSON('getMessageDetails.php', function (json) {
   alert(json);
   alert(json[0].subject);
});
1
Rocket Hazmat 29 Авг 2011 в 13:34