Wrapper函数用于解析多个API请求

时间:2012-03-04 12:10:35

标签: jquery ajax json parsing

我正在构建一个简单的聚合器类型的应用程序,它将从多个网站(通过其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个站点。

有没有更好的方法来做我想在这里完成的事情?

1 个答案:

答案 0 :(得分:0)

如果你想使用$。当你可以将每个请求分配给一个变量时,将该变量推送到一个数组中然后使用该数组作为$ .when的参数