首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ajax调用返回'undefined‘- Companies House API

Ajax调用返回'undefined‘- Companies House API
EN

Stack Overflow用户
提问于 2018-12-13 06:21:21
回答 1查看 72关注 0票数 1

我通过Companies House API获取数据,当我在页面上输出json数组时,它循环得很好,但当我在jQuery中循环它时,我得到了大约16个未定义的结果。我试着到处寻找答案,但似乎就是找不到答案。我唯一的想法是,16个未定义的对象被埋藏在另一个对象中?

如果有任何帮助,我们将非常感谢,代码如下:

代码语言:javascript
复制
jQuery(function($) {
  $('[data-button-search]').click(function(event) {
      var $this = $(this);
      event.preventDefault();
      var value = $('[data-company-id]').val();
      $.ajax({
          type: 'GET',
          url: "https://link.to.site.com/company/"+value+"/name",
          dataType: 'json', // ** ensure you add this line **
          success: function(data){
              $.each(data, function(){
                  $.each(this, function(key, val) {
                      console.log(val.title + " : company number : " + val.company_number);
                      $('[data-select]').append(`
                          <option value='`+key+`'>`+val.title+`</option>
                      `);
                  });
              });
          },
          error: function(XMLHttpRequest, textStatus, errorThrown) {
              console.log("Error!");
          }
      });

  });
});

示例数组,这是我在搜索框中输入"AWD“的结果:

代码语言:javascript
复制
{
  "items_per_page": 50,
  "items": [
    {
      "title": "AWD  LTD",
      "description": "11308643 - Incorporated on 13 April 2018",
      "matches": {
        "snippet": [],
        "title": [
          1,
          3
        ]
      },
      "company_type": "ltd",
      "company_status": "active",
      "links": {
        "self": "/company/11308643"
      },
      "company_number": "11308643",
      "description_identifier": [
        "incorporated-on"
      ],
      "address": {
        "locality": "London",
        "postal_code": "WC1N 3AX",
        "premises": "27 ",
        "address_line_1": "Old Gloucester Street",
        "country": "United Kingdom"
      },
      "date_of_creation": "2018-04-13",
      "kind": "searchresults#company",
      "snippet": "",
      "address_snippet": "27  Old Gloucester Street, London, United Kingdom, WC1N 3AX"
    },
  ],
  "kind": "search#companies",
  "start_index": 0,
  "page_number": 1,
  "total_results": 184
}

已登录控制台

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 09:02:31

问题:

您看到的行为是因为您正在迭代返回数据的所有属性,然后尝试迭代每个属性的“items”属性。这会导致您获得一个成功的返回,然后是16个(或json具有的任意多个属性)未定义的返回。

解决方案:

您可以重构此块,而不是使用嵌套的$.each循环:

代码语言:javascript
复制
success: function(data){
          $.each(data, function(){
              $.each(this, function(key, val) {
                  console.log(val.title + " : company number : " + val.company_number);
                  $('[data-select]').append(`
                      <option value='`+key+`'>`+val.title+`</option>
                  `);
              });
          });
      },

..。一个简单得多的版本:

代码语言:javascript
复制
success: function(data){
            $.each(data.items, function(key, val) {
                console.log(val.title + " : company number : " + val.company_number);
                $('[data-select]').append(`
                    <option value='`+key+`'>`+val.title+`</option>
                `);
              });
      },

在上面的代码块中,我去掉了外部$.each循环,而将内部循环改为目标“data.item”。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53752276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档