Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Ajax调用返回&x27;未定义';-公司之家API_Jquery_Ajax - Fatal编程技术网

Jquery Ajax调用返回&x27;未定义';-公司之家API

Jquery Ajax调用返回&x27;未定义';-公司之家API,jquery,ajax,Jquery,Ajax,我通过公司内部API获取数据,当我在页面上输出json数组时,它会很好地循环,但是当我在jQuery中循环时,我会得到大约16个未定义的结果。我到处都想找到答案,但我就是不太明白。我唯一的想法是,16个未定义的东西埋在另一个物体里 非常感谢您的帮助,代码如下: jQuery(function($) { $('[data-button-search]').click(function(event) { var $this = $(this); event.prevent

我通过公司内部API获取数据,当我在页面上输出json数组时,它会很好地循环,但是当我在jQuery中循环时,我会得到大约16个未定义的结果。我到处都想找到答案,但我就是不太明白。我唯一的想法是,16个未定义的东西埋在另一个物体里

非常感谢您的帮助,代码如下:

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!");
          }
      });

  });
});
登录控制台


问题:

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

解决方案:

不使用嵌套的$。每个循环都可以重构此块:

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>
                  `);
              });
          });
      },
成功:函数(数据){
$.each(数据,函数(){
$。每个(此,函数(键,val){
控制台日志(val.title+“:公司编号:“+val.company\u编号);
$(“[数据选择]”)。追加(`
`+val.title+`
`);
});
});
},
。。。到更简单的版本:

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(数据项、函数(键、值){
控制台日志(val.title+“:公司编号:“+val.company\u编号);
$(“[数据选择]”)。追加(`
`+val.title+`
`);
});
},
在上面的代码块中,我去掉了外部$.each循环,而将内部循环改为目标“data.items”


希望有帮助。

您对问题的描述不清楚。您尝试迭代的实际JSON数据的示例要比PHP
print\r()
dump好得多如果我不得不猜测,您正在迭代整个对象中的所有键/值对。相反,您希望只迭代
data.items
,即
data.items.forEach(({title,company\u number})=>console.log(title,company\u number))
@Phil Sorry buddy,深夜!我已经用JSON数据对其进行了更新——我将如何循环遍历这些项?这只是一个,我正在加载大约50个结果,你可以在完整的结果中看到。Ryan,你太棒了!我从没想过要改变这一点。谢谢你,伙计!
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>
                `);
              });
      },