Javascript捕获错误

时间:2017-08-29 00:20:36

标签: javascript

我是全新的,我正在学习这个javascript。我正在构建一个应用程序/机器人,但我坚持这个。我没有写这个代码只是在网上找到它。因此,当命令开始执行时,我得到了这个" catch"错误,但不知道什么是问题。它不会显示的大多数歌曲,但在浏览器中访问链接工作正常:这是代码中给出错误的部分。



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();
}




1 个答案:

答案 0 :(得分: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

并正确更改您的代码

e.g。

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;
}

虽然,如果您在回复中有多位艺术家,您可能想完全改变您的逻辑 - 但上述内容应该可以解决您的错误