我正在构建一个简单的聚合器类型的应用程序,它将从多个网站(通过其API)提取数据,然后在同一页面上显示数据。例如,在搜索 John Grisham 时,该应用程序将从他的页面获取来自维基百科的数据,这是他从Goodreads获得的最高评价书籍和来自IMDb的作者页面(等等)。
现在我有jQuery代码,用于分别从这些API请求和解析JSON响应,然后使用$.when
/ $.done
函数更新页面。
我正在尝试创建一个能够处理AJAX请求的单个函数,而不是具有5-6个不同的单独函数。但由于这些站点中的每一个都有不同的API实现来请求和返回数据,我无法实现全能功能。
到目前为止,我的方法已处于中间位置 - 我创建了一个具有所需参数和响应解析函数的对象,如下所示:
var Search = {
wikipedia: {
url: 'http://en.wikipedia.org/w/api.php?redirects&callback=?',
param: {
page: searchQuery,
prop: 'text',
action: 'parse',
section: 0
},
template: function(response) {
$('#wikipedia').html(response.parse.text['*']);
}
},
imdb: {
url: 'http://www.imdbapi.com/?callback=?',
param: {
t: searchQuery
},
template: function(response) {
$('#imdb').html(response.Plot);
}
}
};
...然后循环遍历它以异步方式执行所有搜索,并在success
上执行template
方法。
for (var eachSite in Search) {
function searchDo (site) {
$.ajax({
url: site.url,
data: site.param,
dataType: 'json',
success: site.template
});
};
searchDo(Search[eachSite]);
}
这是我无法完全理解的部分。虽然它有效但看起来不太对劲。可访问的API列表可能包括大约10-15个站点。
有没有更好的方法来做我想在这里完成的事情?
答案 0 :(得分:0)
如果你想使用$。当你可以将每个请求分配给一个变量时,将该变量推送到一个数组中然后使用该数组作为$ .when的参数