调用脚本Javascript和HTML
我需要一些帮助,因为我的回调函数,调用脚本Javascript和HTML,javascript,api,callback,Javascript,Api,Callback,我需要一些帮助,因为我的回调函数,parseMovie()只被调用一次!尽管处于for循环中,该循环会重复两次。我使用的是免费的RottomatoES API 输出仅返回一个ID,而不是两个ID! 只运行一次parseMovie(),并返回最后一部电影的电影ID 是否有人对此脚本运行问题进行了修复 HTML代码 <!doctype html> <html class="no-js"> <head> <title>Movies
parseMovie()
只被调用一次!尽管处于for循环中,该循环会重复两次。我使用的是免费的RottomatoES API
输出仅返回一个ID,而不是两个ID!
只运行一次parseMovie()
,并返回最后一部电影的电影ID
是否有人对此脚本运行问题进行了修复
HTML代码
<!doctype html>
<html class="no-js">
<head>
<title>Movies</title>
<link rel="stylesheet" href="css/main.css">
<script src="js/main.js"></script>
</head>
<body>
<form name="input">
<p> Actor/Actress Name: <input type="text" name="fullName"> </p>
<p> Movie 1 <input type="text" name="movie"> </p>
<p> Movie 2 <input type="text" name="movie"> </p>
<p><input type="button" value="Search movies" onclick="getMovies()"></p>
<p><textarea name="output" readonly> </textarea> </p>
</form>
</body>
</html>
影视
演员姓名:
电影一
电影2
JAVASCRIPT
//api key
var APIKEY = "qf54ubt95fea9n7jytr5xh6h";
var movieID = new Array();
var actor = new Array();
var actorName = "Jennifer Lawrence";
var movieTitle;
var output;
function callScript(call) {
var script = document.createElement('script');
script.setAttribute("src", call);
document.body.appendChild(script);
}
function getMovies() {
for (var x=0; x<2; x++) {
movieTitle = document.getElementsByName('movie')[x].value;
movieTitle= cleanMovieTitle(movieTitle);
var movieURL = "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=";
callScript(movieURL + movieTitle + "&page_limit=10&page=1&apikey=" + APIKEY + "&callback=parseMovie");
}
}
function cleanMovieTitle(movie) {
movie = movie.trim();
movie = movie.replace(/ /g, "+");
return movie;
}
function parseMovie(data) {
var titleData = data.movies;
for (var t=0; t<titleData.length; t++) {
movieID[movieID.length] = titleData[t].id;
aCast = titleData[t].abridged_cast;
sample = [];
for (var person = 0; person < aCast.length; person++) {
sample[sample.length] = aCast[person].name;
}
actor[actor.length] = sample;
}
for (var arry = 0; arry < actor.length; arry++) {
if (actor[arry].indexOf(actorName) >= 0) {
output = movieID[arry];
break;
} else {
alert("spelling error of some sort! Error 404");
}
}
document.input.output.value = output;
}
//api密钥
var APIKEY=“qf54ubt95fea9n7jytr5xh6h”;
var movieID=新数组();
var actor=新数组();
var actorName=“詹妮弗·劳伦斯”;
电影价值;
var输出;
函数调用脚本(调用){
var script=document.createElement('script');
setAttribute(“src”,call);
document.body.appendChild(脚本);
}
函数getMovies(){
对于(var x=0;x您的语句var titleData=data.movies;
是错误的,因为API返回的数据包含电影的数组
您必须遍历data.movies
以获取其他电影(而不仅仅是第一部电影)的数据
查看API返回的原始JS代码和JSON数据:我觉得奇怪的三件事可能会导致问题
在数组中使用for…in被认为是不好的做法,尤其是当存在本机forEach方法和
cleanMovieTitle
没有做任何事情,因为它不返回值。如果向它传递数组或对象,它将通过引用传递,并且会被修改,但这被认为是不好的做法,因为它不起作用。如果传递值,函数会在函数的作用域内修改该值,然后对它不做任何操作。您需要返回字符串并设置movieTitle=cleanMovieTitle(movieTitle);
,因此可能API没有返回某个标题,因为它没有被清理。请参阅
回调可能在运行结束之前再次被调用。对此不确定,但您可以通过使用console.log
s填充循环并查看是否如此进行检查
编辑
所以我刚刚在这个页面上运行了你的脚本,我在document.input.output.value=output;
上得到了一个错误,正如预期的那样,parseMovies
在我删除这一行时运行了两次。什么是document.input
?调用它的for循环在哪里?嘿Willma,for循环在函数Get Movies中(对于[0,1]中的x)您发布的代码只是一组函数。在此代码中没有一个函数实际被调用。如果有其他相关代码,请发布。好的,Html代码包含一个运行get Movie函数的按钮,我将发布它,位置为callScript()
defined?据我所知,这不是一个原生JS函数。很抱歉,数据就是数组,代码的这一部分运行得很好。我确实重复了数据电影。很抱歉,Fabian,这不是问题所在,但感谢您关注细节Willma!感谢您的想法,因为我可以与前两个相关。。(我学习了java和python编程)因此,我将修复这两件事..并让你知道它是如何反应的威尔玛,你的帖子听起来很有希望!在我修复之前!这一行指的是从HTML获取文档对象,然后在名为input的对象中获取表单名称,如代码所示,它以名为output的对象结束,output是input中的textarea对象文档体对象的形式。我认为使用document.appendBody中的文档的顺序会把代码搞砸!哇,直到。我更新了HTML以反映这种结构,一切都按照我的预期进行。