我正在尝试使用烂番茄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);
}
});
}
});
});
答案 0 :(得分:1)
您不仅需要设置全局resultID
,还需要刷新reviewApiRequest
。更新resultID
时,它不会神奇地改变其值。