为什么这个$ .ajax函数只在第二次被调用时成功?

时间:2014-01-16 17:46:36

标签: javascript jquery ajax json rotten-tomatoes

我正在尝试使用烂番茄API。在单击事件上,搜索会将最近匹配的电影标题和缩略图图像的JSON数据返回到搜索输入。

完成第一个$ .ajax请求后,使用var resultID进行第二个$ .ajax请求,该结果在顶部声明,并在第一个$ ajax请求的“成功”时设置。

截至目前,当我第一次单击时,它会成功运行第一个请求,但它无法运行返回json.total(在'complete'时),因为resultID返回为'undefined'。但是我第二次点击,结果显然已经设置了resultID,因为它将成功返回json.total。

我猜这是一个与我如何声明和调用resultID(或者ajax的异步触发)相关的简单问题,但我不确定它是什么。谁能解释一下?

var apiKey = '***********';
var resultID = "";

$('#search-submit').click(function(){
    var queryText = $('#movie-search').val();
    var queryURI = encodeURI(queryText);
    var searchApiRequest = "http://api.rottentomatoes.com/api/public/v1.0/movies.json?q=" + queryURI + "&page_limit=10&page=1&apikey=" + apiKey;
    var reviewApiRequest = "http://api.rottentomatoes.com/api/public/v1.0/movies/" + resultID + "/reviews.json?review_type=top_critic&page_limit=10&page=1&country=us&apikey=" + apiKey;

    $.ajax({
        url: searchApiRequest,
        type: 'GET',
        dataType: 'jsonp',
        error: function() {
            console.log('there was error in processing the search request.');
        },
        success: function(json) {
            var movieInfo = json.movies[0];
            var noResultsMessage = 'your search returned no matches. Please try again.'; 
            var resultTitle = movieInfo.title;
            var resultThumb = movieInfo.posters.thumbnail;
            var resultDesc = movieInfo.critics_consensus;

            var reviewsPublicURL = movieInfo.links.reviews;
            var reviewsRequest = reviewsPublicURL;

            resultID = movieInfo.id; // supposed to set global var resultID to movieID

            $('.search-results').find('img').attr('src',resultThumb).end().find('h1').text(resultTitle).end().find('p').text(resultDesc);

        },
        complete: function() {
            $.ajax({
                url:reviewApiRequest,
                type: 'GET',
                dataType: 'jsonp',
                error: function(json) {
                    console.log('for whatever reason, we could not find any reviews of this movie');
                },
                success: function(json) {
                    console.log(json.total);
                } 
            });
        }
    });
});

1 个答案:

答案 0 :(得分:1)

您不仅需要设置全局resultID,还需要刷新reviewApiRequest。更新resultID时,它不会神奇地改变其值。