调用脚本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以反映这种结构,一切都按照我的预期进行。