Функция Wrapper для анализа нескольких запросов API - PullRequest
1 голос
/ 04 марта 2012

Я создаю простое приложение типа агрегатора, которое будет извлекать данные с нескольких веб-сайтов (через их API) и затем отображать данные на одной странице. Например, при поиске Джона Гришама приложение получало бы данные со своей страницы из Википедии, его книги с самым высоким рейтингом от Goodreads и страницы его автора из IMDb (и т. Д.).

Прямо сейчас у меня есть код jQuery для запроса и анализа ответа JSON от этих API отдельно, а затем для обновления страницы с помощью функций $.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 голосов
/ 04 марта 2012

Если вы хотите использовать $., Когда вы можете назначить каждый запрос переменной, поместите эту переменную в массив, а затем используйте массив в качестве аргументов для $ .when

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...