2017-08-29 156 views
-4

我完全陌生,我正在學習這個javascript。我正在構建一個應用程序/機器人,但我堅持這一點。我沒有寫這個代碼,只是在網上找到它。所以當命令開始執行時,我得到這個「catch」錯誤,但不知道什麼是問題。大多數歌曲不會顯示,但在瀏覽器中訪問鏈接可以正常工作:以下是導致錯誤的代碼部分。Javascript捕獲錯誤

if (quizState) { 
 

 
    //Load current song stats 
 
    console.log(newMedia.author + " " + newMedia.duration); 
 
    var XMLsource = 'http://musicbrainz.org/ws/2/artist/?query=artist:' + newMedia.author.replace(/ /g, "%20") + '&limit=1'; 
 

 
    simpleAJAXLib = { 
 

 
    init: function() { 
 
     this.fetchJSON(XMLsource); 
 
    }, 
 

 
    fetchJSON: function(url) { 
 
     var root = 'https://query.yahooapis.com/v1/public/yql?q='; 
 
     var yql = 'select * from xml where url="' + url + '"'; 
 
     var proxy_url = root + encodeURIComponent(yql) + '&format=json&diagnostics=false&callback=simpleAJAXLib.display'; 
 
     document.getElementsByTagName('body')[0].appendChild(this.jsTag(proxy_url)); 
 
    }, 
 

 
    jsTag: function(url) { 
 
     var script = document.createElement('script'); 
 
     script.setAttribute('type', 'text/javascript'); 
 
     script.setAttribute('src', url); 
 
     return script; 
 
    }, 
 

 
    display: function(results) { 
 
     try { 
 
     quizCountry = results.query.results.metadata["artist-list"].artist.area.name; 
 
     quizYear = results.query.results.metadata["artist-list"].artist["life-span"].begin.match(/\d{4}/); 
 
     quizBand = results.query.results.metadata["artist-list"].artist.name; 
 
     if (quizCountry != "" && quizYear != "") { 
 
      console.log(quizCountry + " " + quizYear); 
 
      API.sendChat("U kojoj godini je/su " + quizBand + " osnovan/i?"); 
 
     } 
 
     } catch (e) { 
 
     console.log("Error: " + e.description); 
 
     API.sendChat("Žao nam je, čini se da musicbrainz ne prepoznaje ovaj bend ili umjetnika. Nastavit ćemo za vrijeme sljedeće pjesme."); 
 
     console.log("country or year not known"); 
 
     } 
 
    } 
 
    } 
 
    simpleAJAXLib.init(); 
 
}

+0

什麼是在隨即出現在瀏覽器控制檯中的錯誤? – ceejayoz

+3

這是一些瘋狂的大縮進 –

+0

@ceejayoz它給這個catch錯誤,console.log(「國家或一年未知」);它不想執行 –

回答

0

如果http://musicbrainz.org/ws/2/artist/?回報比一個藝術家更多的搜索,對象返回

results.query.results.metadata["artist-list"].artist 

所以一個數組,訪問數據,這將是

quizCountry = results.query.results.metadata["artist-list"].artist[0].area.name; 
    quizYear = results.query.results.metadata["artist-list"].artist[0]["life-span"].begin.match(/\d{4}/); 
    quizBand = results.query.results.metadata["artist-list"].artist[0].name; 

所以,你需要檢查是否

results.query.results.metadata["artist-list"].count > 1 

和更改代碼適當

例如

if(results.query.results.metadata["artist-list"].count > 1) { 
    quizCountry = results.query.results.metadata["artist-list"].artist[0].area.name; 
    quizYear = results.query.results.metadata["artist-list"].artist[0]["life-span"].begin.match(/\d{4}/); 
    quizBand = results.query.results.metadata["artist-list"].artist[0].name; 
} else { 
    quizCountry = results.query.results.metadata["artist-list"].artist.area.name; 
    quizYear = results.query.results.metadata["artist-list"].artist["life-span"].begin.match(/\d{4}/); 
    quizBand = results.query.results.metadata["artist-list"].artist.name; 
} 

雖然,你可能想改變你的邏輯完全如果您在響應中獲得超過一個藝術家 - 但上面的應該解決您的錯誤