显示JavaStript结果中的所有值

时间:2019-10-26 10:08:16

标签: javascript json

我有这个Javascript:

function sendRequest_for_Get_Popular() {
  movies_ArrayDataModel.clear();
  var xhr = new XMLHttpRequest();
  var url = "http://api.themoviedb.org/3/movie/popular?api_key="
          + config.API_KEY + "&language=en-US&page=1";

  xhr.onreadystatechange = function() {
    if (xhr.readyState === XMLHttpRequest.DONE) {
      if (xhr.status === 200) {

        var response = JSON.parse(xhr.responseText);

        var lenght = response.results.length;

        for (var i = 0; i < lenght; i++) {
          var results = response.results[i];
          var image = "http://image.tmdb.org/t/p/w200/";

          // ========== ========== ==========
          test.text = results.title;
          // ========== ========== ==========
        }
      }
    }
  };
  xhr.open("GET", url, true);
  xhr.send();
}

这个JSON文件:

{
  "page": 1,
  "total_results": 2,
  "total_pages": 1,
  "results": [
    {
      "id": 475557,
      "title": "Joker",
    },
    {
      "id": 420809,
      "title": "Maleficent: Mistress of Evil",
    }
  ]
}

我需要在"title"字段中写入所有"test"值。 例如,采用以下格式:“小丑,恶毒:邪恶的女主人”

现在,我仅获得最后一个"title"的值。 示例:“恶毒:邪恶的女主人”

谢谢。

4 个答案:

答案 0 :(得分:0)

缺少一些信息:

例如,您如何使用“ test”变量-它在何处初始化? 我也强烈建议不要使用这些类型的通用名称。 此公开问题的一种解决方案:

let movies = [];
function sendRequest_for_Get_Popular() {
        ...
        for(let entry of response.results){
          var image = "http://image.tmdb.org/t/p/w200/";
          let movie = {"text": entry.title};
          movies.push(movie);
        }
        ...
}

或者如果您想使用字符串缩写:

let movies = {"text": ""};
function sendRequest_for_Get_Popular() {
        ...
        movies.text = response.results.map(a=>a.title).join(',');
        ...
}

答案 1 :(得分:0)

像这样在每次迭代中附加test.text,而不是在每次迭代中覆盖titles

function sendRequest_for_Get_Popular() {
  movies_ArrayDataModel.clear();
  var xhr = new XMLHttpRequest();
  var url = "http://api.themoviedb.org/3/movie/popular?api_key="
          + config.API_KEY + "&language=en-US&page=1";

  xhr.onreadystatechange = function() {
    if (xhr.readyState === XMLHttpRequest.DONE) {
      if (xhr.status === 200) {

        var response = JSON.parse(xhr.responseText);

        var lenght = response.results.length;
        test.text = ''; // initializing the text as blank string here
        for (var i = 0; i < lenght; i++) {
          var results = response.results[i];
          var image = "http://image.tmdb.org/t/p/w200/";

          // ========== ========== ==========
          test.text += results.title + ', ';
          // ========== ========== ==========
        }
        test.text.replace(/(^,)|(,$)/g, ""); // trimming trailing ','
      }
    }
  };
  xhr.open("GET", url, true);
  xhr.send();
}

或更简单的是,您可以用地图替换循环,然后从中创建一个用逗号分隔的字符串:

    var response = JSON.parse(xhr.responseText);

    test.text = response.results
                 .map( r => r.title ).join(',');

或使用reduce

var response = JSON.parse(xhr.responseText);

test.text = response.results
                 .reduce( (a, r) => a + r.title + ',', '' )
                 .replace(/,$/, '');

答案 2 :(得分:0)

每次都使用相同的变量,因此将覆盖其值。 您可以尝试不同的方法来获得想要实现的目标。 我会使用map函数,但是for循环也可以。

// using a for loop

test.text = ''
for (var i = 0; i < lenght; i++) {
  var results = response.results[i];
  var image = "http://image.tmdb.org/t/p/w200/";

  // ========== ========== ==========
  if (test.text === '') {
    test.text = results.title;
  } else {
    test.text = ', ' + results.title;
  }
  // ========== ========== ==========
}

// using a map function
var titles = response.results.map(function (result) {
  return result.title
})
test.text = titles.join(', ')

答案 3 :(得分:0)

感谢大家的帮助。我用过:

test.text += results.title + ", ";