我有这个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"
的值。
示例:“恶毒:邪恶的女主人”
谢谢。
答案 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 + ", ";