【问题标题】:Javascript jQuery calling on API to fill table but receiving undefined for a particular object callJavascript jQuery 调用 API 来填充表格,但接收到未定义的特定对象调用
【发布时间】:2016-08-07 22:01:21
【问题描述】:

所以我似乎遇到的问题是,当我填充我的表时,对象 discogsObjects.year 始终以“未定义”填充我的表,尽管事实上当我在 devtools 中调用它时它会返回从 API 调用的年份值。我的格式与代码一致,所以我不确定问题可能是什么......

谢谢!

var discogsObjects = {
    title: [],
    label: [],
    year: [],
};


$(".artistform").submit(function(event){
  event.preventDefault();

  var band = ($("#userInput").val());
  var url = "https://api.discogs.com/database/search?q=" + band + "&key=olnzRAzKsxiVlgocWNCH&secret=RPCwqvPXDmFkHHNzDePPKIcMsHRmNUIK"

  $.ajax({
    url: url,
    type: "GET",
    dataType: "json",
    success: (data)=> {
      console.log(data.results);



      for (i = 0; i<21; i++) {
        for(var key in data.results[i]){
          //if (key === "id") idArr.push(data.results[i][key]);
          if (key === "title")  discogsObjects.title.push(data.results[i][key]);
          if (key === "label") discogsObjects.label.push(data.results[i][key]);
          if (key === "year") discogsObjects.year.push(data.results[i][key]);
        }

          //$thead(.hidden).show()
          // $('#resultsHead').append('<tr><td>Year of Release</td><td>Artist Release</td><td>Record Label</td></tr>');

         $('#resultsTable').append('<tr><td>'+discogsObjects.title[i]+'</td><td>'+discogsObjects.year[i]+'</td><td>'+discogsObjects.label[0]+'</td></tr>');


      }
    }
  });
});

【问题讨论】:

  • 是否有理由将数据推送到 discogsObject?

标签: javascript jquery api discogs-api


【解决方案1】:

“结果”数组中返回的第一个对象是对没有year 属性的波段的描述,因此 for 循环的第一次迭代不会填充year 数组中的discogsObjects对象,因此在此后的每次迭代中,undefined 将被附加到 DOM 中,因为它被关闭了一个。

例如,使用“Maroon 5”返回的第一个对象将是:

{  
    "thumb":"https://api-img.discogs.com/gcuqJ3Ni4_2F_F_35xU7anju50Q=/150x150/smart/filters:strip_icc():format(jpeg):mode_rgb():quality(40)/discogs-images/A-192151-1452146008-4372.jpeg.jpg",
    "title":"Maroon 5",
    "uri":"/artist/192151-Maroon-5",
    "resource_url":"https://api.discogs.com/artists/192151",
    "type":"artist",
    "id":192151
}

因此,您的 for 循环将找不到名为“year”的键,discogsObject.year 将为空。然后在i = 0undefined 时附加discogsObject.year[i]。接下来,i 递增,并在下一个对象中找到一年,将其推送到 year 数组中,但是当将其附加到 DOM 时,您尝试在 i = 1 时执行 discogsObject.year[i],但 discogsObject.year.length = 1 所以这是undefined.

【讨论】:

  • 谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多