我正在寫一個簡短的腳本,連接到LastFM api來獲取我最後一首scrobbled歌曲。我遇到的問題是JSON版本有一個屬於「正在播放」的屬性,當你正在收聽一首歌曲時,它的值爲「true」。但是,如果沒有播放歌曲,則該屬性根本不存在。使用並不總是存在的JSON屬性。使用jquery
這是我現在使用的腳本,當我通過spotify或iTunes等收聽歌曲時,它可以正常工作。
<p>
<p class="nowplaying"> <span class="track"></span> by <span class="artist"></span></p>
<p>
<script type="text/javascript">
$.getJSON('https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=JamesTaylor87&api_key=ADD-API-KEY-HERE&format=json', function(data) {
var artist = $(".artist"),
track = $(".track"),
np = $(".nowplaying"),
artistVal = data.recenttracks.track[0].artist["#text"],
trackVal = data.recenttracks.track[0].name,
nowplaying = data.recenttracks.track[0]["@attr"].nowplaying;
if(typeof nowplaying === "undefined"){
np.prepend("The last song I listened to was")
artist.append(artistVal);
track.append(trackVal);
} else {
np.prepend("I am currently listening to")
artist.append(artistVal);
track.append(trackVal);
}
});
</script>
然而,當我不聽任何東西,我得到以下錯誤信息(在Safari瀏覽器),並沒有什麼作品:
undefined is not an object (evaluating 'data.recenttracks.track[0]["@attr"].nowplaying')
鉻錯誤顯示如下:
Uncaught TypeError: Cannot read property 'nowplaying' of undefined
我試圖使用一個if語句,當它未定義,但沒有工作,並不真正知道還有什麼要嘗試。任何幫助將非常感激。
你嘗試過調試,如果 'data.recenttracks.track [0] [ 「@ ATTR」]' 定義看到或不爲空?甚至可能是您的@attr拼寫錯誤或完全錯誤。 –
是的,我查過了。我也查看了JSON文件,並且當歌曲不播放時,該屬性不存在。當歌曲播放時,我已經測試了該屬性,以提醒返回「真」的值。但是,一旦我停止播放歌曲,該屬性只會返回錯誤「未定義不是對象」。 – Thoron
是的,**正在播放**與此無關。正如@奧斯汀所說,它與'data.recenttracks'有關。跟蹤[0] [「@ attr」]'不存在 – JSelser