使用JavaScript和HTML显示API结果
首先,我对使用API非常陌生。英语不是我的第一语言。我在网上搜索过,但没有找到我想要的东西,或者至少我对我读到的东西了解不够,不知道如何改变它并将其应用到我的情况中 我正在使用Omdb API和Giphy API,制作一个愚蠢的页面。我正在使用JavaScript和HTML 最后,我希望页面显示用户搜索电影+主题gifs的搜索结果 到目前为止,我已经从这两个API得到了一个结果。这一切都很好。我不知道如何从这些结果中显示,例如,仅显示电影标题和.gif文件。到目前为止,我试图分割返回结果的尝试都失败了。有什么建议吗?下面是我的JavaScript代码使用JavaScript和HTML显示API结果,javascript,html,giphy-api,Javascript,Html,Giphy Api,首先,我对使用API非常陌生。英语不是我的第一语言。我在网上搜索过,但没有找到我想要的东西,或者至少我对我读到的东西了解不够,不知道如何改变它并将其应用到我的情况中 我正在使用Omdb API和Giphy API,制作一个愚蠢的页面。我正在使用JavaScript和HTML 最后,我希望页面显示用户搜索电影+主题gifs的搜索结果 到目前为止,我已经从这两个API得到了一个结果。这一切都很好。我不知道如何从这些结果中显示,例如,仅显示电影标题和.gif文件。到目前为止,我试图分割返回结果的尝试都
var form = document.getElementById('search-form');
form.addEventListener("submit", search);
function search(event) {
event.preventDefault();
document.getElementById("present_result").innerHTML = "";
if(this.elements.query.value === '') {
alert("Enter search word!");
} else {
var rawInputData = this.elements.query.value;
var fixedInputData = rawInputData.split(" ");
var inputData = encodeQueryData(fixedInputData);
var inputDataGif = encodeQueryDataGif(fixedInputData);
function encodeQueryData(data) {
let ret = [];
for (let d in data)
ret.push(encodeURIComponent(data[d]));
return ret.join('%20');
}
function encodeQueryDataGif(data) {
let ret = [];
for (let d in data)
ret.push(encodeURIComponent(data[d]));
return ret.join('+');
}
var omdbAPI = new XMLHttpRequest();
var gifAPI = new XMLHttpRequest();
var omdbURL = "http://www.omdbapi.com/?s=" + inputData + "&type=movie";
var gifURL = "http://api.giphy.com/v1/gifs/search?q=" + inputDataGif + "&limit=1&api_key=dc6zaTOxFJmzC";
omdbAPI.addEventListener("load", function() {
if (this.responseText === '{"Response":"False","Error":"Movie not found!"}')
{
alert("No result.");
} else {
var result = JSON.parse(this.responseText);
console.log(result);
result = JSON.stringify(result);
document.getElementById("present_result").innerHTML = result;
}
});
gifAPI.addEventListener("load", function() {
if (this.responseText === '{"Response":"False","Error":"Not found!"}')
{
alert("No Result.");
} else {
var result = JSON.parse(this.responseText);
console.log(result);
result = JSON.stringify(result);
document.getElementById("present_gif").innerHTML = result;
}
});
omdbAPI.open("get", omdbURL, true);
omdbAPI.send();
gifAPI.open("get", gifURL, true);
gifAPI.send();
}
}
和下面的HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Mashup test</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<!-- Form -->
<form action="" method="get" id="search-form" class="search-form">
Movie: <input type="text" name="query">
<button type="submit" id="submit">Search</button>
</form>
<!-- Result -->
<div id="present_result">
</div>
<div id="present_gif">
</div>
<script src="scripts.js"></script>
</body>
</html>
和Giphy的样本结果:
{
"data": [{
"type": "gif",
"id": "pWDH6fkHgGHza",
"slug": "titanic-leonardo-dicaprio-pWDH6fkHgGHza",
"url": "http://giphy.com/gifs/titanic-leonardo-dicaprio-pWDH6fkHgGHza",
"bitly_gif_url": "http://gph.is/Z15kA0",
"bitly_url": "http://gph.is/Z15kA0",
"embed_url": "http://giphy.com/embed/pWDH6fkHgGHza",
"username": "",
"source": "http://tomhiddles.tumblr.com/post/37231367662",
"rating": "g",
"content_url": "",
"source_tld": "tomhiddles.tumblr.com",
"source_post_url": "http://tomhiddles.tumblr.com/post/37231367662",
"is_indexable": 0,
"import_datetime": "2013-03-24 01:54:54",
"trending_datetime": "1970-01-01 00:00:00",
"images": {
"fixed_height": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200.gif",
"width": "513",
"height": "200",
"size": "271598",
"mp4": "http://media0.giphy.com/media/pWDH6fkHgGHza/200.mp4",
"mp4_size": "19808",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/200.webp",
"webp_size": "392604"
},
"fixed_height_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200_s.gif",
"width": "513",
"height": "200"
},
"fixed_height_downsampled": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200_d.gif",
"width": "513",
"height": "200",
"size": "530508",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/200_d.webp",
"webp_size": "196204"
},
"fixed_width": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w.gif",
"width": "200",
"height": "78",
"size": "65057",
"mp4": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w.mp4",
"mp4_size": "24950",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w.webp",
"webp_size": "74208"
},
"fixed_width_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w_s.gif",
"width": "200",
"height": "78"
},
"fixed_width_downsampled": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w_d.gif",
"width": "200",
"height": "78",
"size": "100970",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/200w_d.webp",
"webp_size": "37622"
},
"fixed_height_small": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/100.gif",
"width": "256",
"height": "100",
"size": "271598",
"mp4": "http://media0.giphy.com/media/pWDH6fkHgGHza/100.mp4",
"mp4_size": "170265",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/100.webp",
"webp_size": "98852"
},
"fixed_height_small_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/100_s.gif",
"width": "256",
"height": "100"
},
"fixed_width_small": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/100w.gif",
"width": "100",
"height": "39",
"size": "65057",
"mp4": "http://media0.giphy.com/media/pWDH6fkHgGHza/100w.mp4",
"mp4_size": "45670",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/100w.webp",
"webp_size": "23380"
},
"fixed_width_small_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/100w_s.gif",
"width": "100",
"height": "39"
},
"downsized": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.gif",
"width": "500",
"height": "195",
"size": "1006467"
},
"downsized_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy_s.gif",
"width": "500",
"height": "195"
},
"downsized_large": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.gif",
"width": "500",
"height": "195",
"size": "1006467"
},
"downsized_medium": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.gif",
"width": "500",
"height": "195",
"size": "1006467"
},
"original": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.gif",
"width": "500",
"height": "195",
"size": "1006467",
"frames": "12",
"mp4": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.mp4",
"mp4_size": "84279",
"webp": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy.webp",
"webp_size": "378130"
},
"original_still": {
"url": "http://media0.giphy.com/media/pWDH6fkHgGHza/giphy_s.gif",
"width": "500",
"height": "195"
},
"looping": {
"mp4": "http://media.giphy.com/media/pWDH6fkHgGHza/giphy-loop.mp4"
},
"preview": {
"mp4": "http://media3.giphy.com/media/pWDH6fkHgGHza/giphy-preview.mp4",
"mp4_size": "44332",
"width": "326",
"height": "126"
},
"downsized_small": {
"mp4": "http://media3.giphy.com/media/pWDH6fkHgGHza/giphy-downsized-small.mp4",
"mp4_size": "116662"
}
}
}],
"meta": {
"status": 200,
"msg": "OK",
"response_id": "5887622069432538bfa2a521"
},
"pagination": {
"total_count": 11258,
"count": 1,
"offset": 0
}
}
两个API都返回一个JSON对象 json对象通常是这样构造的:
{
"property1": "value1",
"property2": "value2"
"property_array": ["arrayValue1", "arrayValue2"],
"property_object": {
"propertyA": "valueA",
"attributeB": "valueB"
}
}
因此,让我们使用OMDb(例如):
要访问结果,您需要访问“搜索”属性:
var entries = result.Search;
然后,需要对搜索对象的每个属性进行“循环”(whitch也是一个对象):
为此,可以使用for…in循环:
for(var entry_key in entries) {
// control that property is own by the object (not prototype)
if(entries.hasOwnProperty(entry_key)) {
// do whatever you want with the entry
// To access the entry, use this notation:
var entry = entries[entry_key];
// to stay with OMDb example, this should be:
var movie_title = entry.Title;
}
}
var结果={
“搜索”:[{
“标题”:“泰坦尼克号”,
“年份”:“1997年”,
“imdbID”:“tt0120338”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BZDNiMjE0NDgtZWRhNC00YTlhLTk2ZjItZTQzNTU2NjAzNWNkXkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg“
}, {
“标题”:“泰坦尼克二号”,
“年份”:“2010年”,
“imdbID”:“tt1640571”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTMxMjQ1MjA5Ml5BMl5BanBnXkFtZTcwNjIzNjg1Mw@@._V1_SX300.jpg“
}, {
“标题”:“泰坦尼克号:传说还在继续…”,
“年份”:“2000年”,
“imdbID”:“tt0330994”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTg5MjcxODAwMV5BMl5BanBnXkFtZTcwMTk4OTMwMg@@._V1_SX300.jpg“
}, {
“标题”:“泰坦尼克号”,
“年份”:“1953年”,
“imdbID”:“tt0046435”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTU3NTUyMTc3Nl5BMl5BanBnXkFtZTgwOTA2MDE3MTE@._V1_SX300.jpg“
}, {
“标题”:“举起泰坦尼克号”,
“年份”:“1980年”,
“imdbID”:“tt0081400”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTY5MTQwNzMxNV5BMl5BanBnXkFtZTcwMzkwOTMyMQ@@._V1_SX300.jpg“
}, {
“标题”:“泰坦尼克号的传说”,
“年份”:“1999年”,
“imdbID”:“tt1623780”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMjMxNDU5MTk1MV5BMl5BanBnXkFtZTgwMDk5NDUyMTE@._V1_SX300.jpg“
}, {
“头衔”:“泰坦尼克号上的女服务员”,
“年份”:“1997年”,
“imdbID”:“tt0129923”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMWUzYjgyNDEtNTAyMi00M2JjLTlhMzMtMDJmOGM1ZmYzNzY4XkEyXkFqcGdeQXVyMTA0MjU0Ng@@._V1_SX300.jpg“
}, {
“标题”:“寻找泰坦尼克号”,
“年份”:“2004年”,
“imdbID”:“tt1719665”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTAzNjY0NDA2NzdeQTJeQWpwZ15BbWU4MDIwMzc1MzEx._V1_SX300.jpg"
}, {
“标题”:“泰坦尼克号”,
“年份”:“1943年”,
“imdbID”:“tt0036443”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTU2Njg4MDgxN15BMl5BanBnXkFtZTcwNzE4MjYyMQ@@._V1_SX300.jpg“
}, {
“标题”:“S.O.S.泰坦尼克号”,
“年份”:“1979年”,
“imdbID”:“tt0079836”,
“类型”:“电影”,
“海报”:https://images-na.ssl-images-amazon.com/images/M/MV5BMTMwOTU5MDU0OV5BMl5BanBnXkFtZTcwMDc4OTYyMQ@@._V1_SX300.jpg“
}],
“totalResults”:“170”,
“响应”:“正确”
};
var movies_list=document.getElementById('movies-list');
var条目=results.Search;
用于(var条目\输入条目){
//控件,该属性由对象(不是原型)拥有
if(entries.hasOwnProperty(entry_key)){
//你想怎么做就怎么做
//要访问条目,请使用以下符号:
风险值输入=输入[输入\键];
//要继续使用OMDb示例,这应该是:
var movie_line='标题:'
+entry.Title+'(年份:'+entry.year+)';
movies\u list.innerHTML+=电影\u行;
}
}
var result=JSON.parse(this.responseText)之后,在result
中有什么内容代码>?@MajidFouladpour在两种情况下都显示[object object]作为结果。假设你想跳过JSON.stringify.No,我不想。我的意思是,如果您在控制台(F12>源代码,然后设置断点)中检查result
的值,您会看到什么?@majidfoulapour result=Object{Search:Array[10],totalResults:“170”,Response:“True”}来自OMDb。结果=来自Giphy的对象{data:Array[1],meta:Object,pagination:Object}。您在上面的注释中发布的是数据的摘要,而不是数据本身。正如您所说,您的主要抱怨是您不知道如何使用结果
对象向页面添加动态html。如果不提供您问题中所述结果的样本,我们将如何帮助您?请添加您从API获得的数据示例。感谢您提供了非常简洁且解释清楚的答案!:3.
for(var entry_key in entries) {
// control that property is own by the object (not prototype)
if(entries.hasOwnProperty(entry_key)) {
// do whatever you want with the entry
// To access the entry, use this notation:
var entry = entries[entry_key];
// to stay with OMDb example, this should be:
var movie_title = entry.Title;
}
}