почему получение длины массива дает неопределенное значение? - PullRequest
0 голосов
/ 29 ноября 2011

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

$.getJSON('newMessageDetails', function (json)
{
    var old_id = document.getElementById("td_id").value;
    var messages_count = Object.keys(json).length;           
    console.log(messages_count);
    console.log(json);
    last_id = json[messages_count]["msgId"];

});

json [messages_count] ["msgId"] дает неопределенное в консоли ??

myMessageDetails:

public function executeNewMessageDetails(sfWebRequest $request)
{  
    $profile_id = $this->getUser()->getAttribute('profile_id','zero');  
    $new_msgs = RcMessageBoxTablePeer::getNewMessages($profile_id);
    $hr=2;
    $i=1;
    if (count($new_msgs) >= 1)
    {
        foreach ($new_msgs as $row)
        {
           $date = $row->getCreatedAt();
           //$cd = strtotime($date);
           //$newdate = date('Y-m-d H:i:s', mktime(date('h',$cd), date('i',$cd), date('s',$cd), date('m',$cd), date('d',$cd), date('Y',$cd)));
           $subject = $row->getSubject();
           $message = $row->getMessage();
           $from = $row->getProfileIdFrom();
           $id = $row->getId();
           $uc_record = RcProfileTablePeer::getById($from);
           $uc_from = $uc_record->getUniqueCode();
           $output[$i] = array("td_date" => $date, "td_subject" => $subject, "td_from" => $uc_from, "td_message" => $message, "msgId" => $id , "i" => $i);
           $i++;
        }
        return $this->renderText(json_encode($output));
    }
}

console.log (json) дает:

5
list:98
Object
543: Object
544: Object
545: Object
546: Object
547: Object
i: 1
msgId: 547
td_date: "2011-11-29 11:33:05"
td_from: "CHARLIE000RC"
td_message: "tooltip show message test 2 id 547"
td_subject: "Freechat message"

Может кто-нибудь объяснить, пожалуйста? не знаю, что я делаю не так, хотя спасибо

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

Объекты не имеют свойства длины.попробуйте это.

var obj = jQuery.parseJSON(json);

obj.length();

или вы можете попробовать это.

Object.keys(json).length;  
0 голосов
/ 29 ноября 2011

Вы должны просто перебрать объект и сосчитать.Это единственный способ узнать, сколько «значимых» объектов у вас есть в вашем объекте.

0 голосов
/ 29 ноября 2011

Если вам нужен подсчет всех ключей, вы можете переписать его так:

$.getJSON('newMessageDetails', function (json)
{
    ...;
    var messages_count = Object.keys(json).length;           
    console.log(messages_count);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...