2017-08-29 124 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; 
} 

虽然,你可能想改变你的逻辑完全如果您在响应中获得超过一个艺术家 - 但上面的应该解决您的错误