2013-07-26 62 views
0

我正在解析smil(xml)文件以獲取路徑名列表。解析進行得很順利,並存放在一個巨大的文字對象中。無法讀取未定義的屬性'undefined',但我確定該var有效

但當我嘗試獲取信息回去,我只得到:

/home/pi/RaspberryPiTV-master/app.js:158 
     Playlist.push(smil.playlist.video[i].src); 
             ^
TypeError: Cannot read property 'undefined' of undefined 
at /home/pi/RaspberryPiTV-master/app.js:158:46 
at /home/pi/RaspberryPiTV-master/app.js:321:39 
at Object.oncomplete (fs.js:93:15) 

的代碼如下:

var smil={}, i=0; 
Playlist=[]; 
parse("/home/pi/test.smil", function (parsed){ 
    smil=parsed; 
    console.dir(util.inspect(smil, false, null)); 
    do 
    { 
     Playlist.push(smil.playlist.video[i].src); 
     i=i+1; 
    }while(i<smil.playlist.video.length-1); 
    ... 
} 

功能解析(路徑,回調)是相當巨大的,但確實工作,因爲它的印刷工作:

{ 
    stream: 
    [ 
     { name: 'Stream1' } 
    ], 
    playlist: 
    [ 
     { video: 
     [ 
      { src: 'L.mp4', start: '5', length: '5' }, 
      { src: 'SW.mp4', start: '50', length: '5' }, 
      { src: 'HN.mp4', start: '150', length: '5' } 
     ], 
     name: 'pl1', 
     playOnStream: 'Stream1', 
     repeat: 'true', 
     scheduled: '2013-07-23 11:00:00' 
     } 
    ] 
} 

我錯過了什麼嗎?我只是不明白爲什麼我得到undefined,因爲我確實打印了正確的打印件。

+1

變量'i'和'smil.playlist.video'都是'undefined'。把'var i'放在while循環旁邊。 (在解析回調中) – Halcyon

+0

我是怎麼定義的? 是不是和smil同時聲明? – DrakaSAN

+1

我不知道,'我'是全球定義的,所以誰知道它在哪裏。當這個回調運行時,它是'未定義的'。 – Halcyon

回答

2

playlist是一個數組。

更換

smil.playlist.video[i].src 

var index = 0; // or whatever 
smil.playlist[index].video[i].src 
+0

我沒有看到那個來,謝謝你們所有人 – DrakaSAN

1

這就是說video [i]是未定義的,因此未定義對象上的任何方法都是未定義的!嘗試打印出smil.playlist。

2

根據您的JSON,playlist是一個數組:

playlist: 
    [ <-- Array declaration 
     { ... } 
    ] 

但是,你正在做的:

smil.playlist.video[i].src 
-------------^ 

您需要參考索引playlist

相關問題