JSON数组只有1个结果

时间:2017-07-03 17:35:34

标签: javascript

在我的getValueByKey函数中,我想输出5个不同的项及其属性,但我的for循环似乎只允许我一次选择一个。

当我改为i = 4时,它将转到第5项。我只想输出所有而不是只选择一个。

感谢任何帮助。非常感谢你。

window.onload = function() {

var getJSON = function (url, successHandler, errorHandler) {
    var xhr = typeof XMLHttpRequest != 'undefined'
        ? new XMLHttpRequest()
        : new ActiveXObject('Microsoft.XMLHTTP');

    xhr.open('get', url, true);
    xhr.setRequestHeader("X-Algolia-Application-Id", apiApplicationId);
    xhr.setRequestHeader("X-Algolia-API-Key", apiKey);
    xhr.responseType = 'json';
    xhr.onreadystatechange = function () {
        var status;
        var data;
        if (xhr.readyState == 4) {
            status = xhr.status;
            if (status == 200) {
                successHandler && successHandler(xhr.response);
            } else {
                errorHandler && errorHandler(status);
            }
        }
    };
    xhr.send();
};

  var search = document.getElementById('search');

  search.addEventListener('keyup', function() {
    getJSON(apiEndpoint, function(data) {

      function getValueByKey(key, data) {
        var i, len = data.length;

        for (i = 0; i < len; i++) {
          if (data[i] && data[i].hasOwnProperty(key)) {
            return data[i][key];
          }
        }

        return -1;
      }

      document.getElementById('item-wrapper').innerHTML =
        '<div class="col-sm-4">' +
        '<img src="path/to-image.jpg">' +
        '</div>' +
        '<div class="col-sm-8">' +
        '<ul>' +
        '<li><strong>Bag Brand:</strong> <span id="search-results-brand"></span></li>' +
        '<li><strong>Bag ID:</strong> <span id="search-results-id"></span></li>' +
        '<li><strong>Bag Color:</strong> <span id="search-results-color"></span></li>' +
        '<li><strong>Bag Description:</strong> <span id="search-results-description"></span></li>' +
        '<li><strong>Bag Material:</strong> <span id="search-results-material"></span></li>' +
        '<li><strong>Bag Price:</strong> $<span id="search-results-price"></span></li>' +
        '</ul>' +
        '</div>';

      output_id = getValueByKey('id', data.hits);
      output_brand = getValueByKey('brand', data.hits);
      output_color = getValueByKey('color', data.hits);
      output_description = getValueByKey('description', data.hits);
      output_material = getValueByKey('material', data.hits);
      output_price = getValueByKey('price', data.hits);

      document.getElementById("search-results-brand").innerHTML = output_brand;
      document.getElementById("search-results-id").innerHTML = output_id;
      document.getElementById("search-results-color").innerHTML = output_color;
      document.getElementById("search-results-description").innerHTML = output_description;
      document.getElementById("search-results-material").innerHTML = output_material;
      document.getElementById("search-results-price").innerHTML = output_price;

    }, function(status) {
      alert('Something went wrong.');
    });
  });
};
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Test</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  <link rel="stylesheet" type="text/css" href="css/common.css">
  <script type="application/ecmascript" src="js/common.js"></script>
</head>

<body>
  <header>
    <div class="container">
      <div class="row">
        <div class="col-sm-12">
          <h1>Test</h1>
        </div>
      </div>
    </div>
  </header>
  <div class="container">
    <div class="row">
      <div class="col-sm-12">
        <input placeholder="search bags" id="search">
      </div>
    </div>
  </div>
  <div class="container">
    <div class="row item-row" id="item-wrapper"></div>
  </div>
</body>

</html>

1 个答案:

答案 0 :(得分:2)

您是返回数据[i] [密钥]; 。不要返回直到循环结束。

function getValueByKey(key, data) {
        var i, len = data.length;
        var result =[];

        for (i = 0; i < len; i++) {
          if (data[i] && data[i].hasOwnProperty(key)) {
            result.push(data[i][key]);
          }
        }

        return result;
      }

在评论中修改您的问题

根据我的理解你的问题,你可以尝试这样的事情。我没有测试这段代码。如果有任何错误,请告诉我。

    var items;
for(var i=0; i<output_id.length; i++){
items +='<div class="col-sm-4">' +
            '<img src="path/to-image.jpg">' +
            '</div>' +
            '<div class="col-sm-8">' +
            '<ul>' +
            '<li><strong>Bag Brand:</strong>'+output_brand[i]+'<span id="search-results-brand"></span></li>' +
            '<li><strong>Bag ID:</strong>'+output_id[i]+' <span id="search-results-id"></span></li>' +
            '<li><strong>Bag Color:</strong>'+output_color[i]+' <span id="search-results-color"></span></li>' +
            '<li><strong>Bag Description:</strong>'+output_description[i]+' <span id="search-results-description"></span></li>' +
            '<li><strong>Bag Material:</strong>'+output_material[i]+' <span id="search-results-material"></span></li>' +
            '<li><strong>Bag Price:</strong> '+output_price[i]+'$<span id="search-results-price"></span></li>' +
            '</ul>' +
            '</div>';
}

document.getElementById('item-wrapper').innerHTML =items;
相关问题