在表Javascript中显示Json数组

时间:2017-07-21 17:03:52

标签: javascript html json requirejs

我有一个查询instagram API的API。我正在尝试使用我的API并在表格中显示标签搜索。 Json的回答是这样的:

{"data":[{"media_count":13485788,"name":"argentina"},{"media_count":47097,"name":"argentinas"}]}

这是我的javascript代码: 型号:

define([], function(){
  return {
    InstagramTag: "",
    exists: true,
    tags: []
  } ;

});

控制器:

define(["jquery", "events", "model"], function($, events, model) {

  function initialize() {
    $("#user-selection").change(function() {
      var TagName = $("#user-selection").val() ;
      console.log("Fetching information for " + TagName) ;
      $("*").css({"cursor": "wait"}) ;
      $.getJSON("/api/tag/" + TagName, function(data) {
        model.exists = true ;
        model.tags = data ;
      }).fail(function() {
        model.exists = false ;
        model.tags = [] ;
      }).always(function() {
        model.InstagramTag = TagName ;
        $("*").css({"cursor": "initial"}) ;
        events.trigger("model_updated") ;
      });
    }) ;
  }

  return { "initialize": initialize };

});

TagTable:

define(["underscore"], function(_) {

  var rowTemplate = _.template("<tr>" + 

    "<td><%= name %></td>" +
    "<td><%= media_count %></td>"

    "</tr>") ;

  var repoTable = _.template("<table id='repo-table' class='table'>" +
    "<thead>" +
      "<tr>" +
        "<th>name</th><th>media_count</th>" +
      "</tr>" +
    "</thead>" +
    "<tbody>" +
      "<%= tbody %>" +
    "</tbody>" +
    "</table>") ;

  function build(model, divName) {
    var tbody = "" ;
    _.each(model.tags, function(tag) {
      tbody += rowTemplate(tag) ;
    }) ;
    var table = repoTable({tbody: tbody}) ;
    $(divName).html(table) ;
  }

  return { "build": build } ;
}) ;

我得到了TagTable中的错误,我无法在表格中显示Json数组。 错误:  _.each(model.tags,function(tag) - media_count未定义。 当我读到de Json Array但是我不知道如何解决这个问题时,我发现了一些错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我觉得你希望model.tags成为一个数组。但是,您获得的JSON是一个对象,其data字段具有值数组,您将整个对象分配给model.tags而不是字段。要使model.tags成为数组,您应该分配data字段。所以你应该这样做:

$.getJSON("/api/tag/" + TagName, function(data) {
  model.exists = true ;
  model.tags = data.data; // Change this line!
})...