JQuery: Ajax JSON простой рендеринг - PullRequest
2 голосов
/ 21 февраля 2012

Я пробую jQuery 1.6.4 для мобильных устройств, чтобы получить простой канал json и отобразить его в качестве учебного упражнения.Я не могу получить обратный вызов в getJSON для запуска, хотя.Канал json открыт и общедоступен, так что все в порядке.Может ли это быть проблема с мобильным jQuery 1.6.4 +?

    $.getJSON('https://raw.github.com/currencybot/open-exchange-rates/master/latest.json', 
      function (data) {
        var items = [];

        $.each(data, function (key, val) {
            items.push('<li id="' + key + '">' + val + '</li>');
        });

        $('<ul/>', {
            'class': 'my-new-list',
            html: items.join('')
        }).appendTo('body');
    });

1 Ответ

3 голосов
/ 21 февраля 2012

Вы не можете сделать AJAX-запрос к этому URL, потому что это нарушит ту же политику происхождения.См. http://e -mats.org / 2010/01 / jquery-getjson-and-the-same-origin-policy / для объяснения.Вот цитата:

При создании простого смешивания с данными из внешних источников вы обычно хотите прочитать данные в подходящем формате - например, JSON.Инструментом для работы, как правило, является JavaScript, работающий в вашем любимом браузере.Единственная проблема состоит в том, что запросы, сделанные с помощью XHR (XMLHttpRequest), должны следовать той же политике происхождения, что означает, что запрос нельзя сделать для ресурса, живущего на другом хосте, чем хост, обслуживающий исходный запрос.

Чтобы получитьвокруг этого клиенты обычно используют JSONP - или простую модификацию обычного вывода JSON.Данные по-прежнему в формате JSON, но вывод также включает простой обратный вызов в конце запроса, запускающий JavaScript в локальном браузере.Таким образом, создатель данных на самом деле говорит браузеру (так много хакерских способов), что все в порядке, я действительно обдумал это.Помогите себе.

По сути, обычный AJAX использует XMLHtmlRequest, в котором установлены политики безопасности того же домена.JSONP, с другой стороны, вставляет тег сценария (без политик происхождения в том же домене), который выполняет функцию обратного вызова.Но конечный сервер должен поддерживать это, поскольку он отвечает за фактическое создание сценария с помощью функции обратного вызова.

Если сервер поддерживает JSONP, вы можете сделать это, добавив callback=? к параметрам запроса в URLВы звоните с getJSON.Но, похоже, эта конечная точка не поддерживает JSONP (добавление callback=? ничего не делает).

Поэтому вам, вероятно, придется создать на своем сервере конечную точку прокси для доступа к этим данным.По сути, создайте конечную точку на вашем собственном сервере, которая загружает эти данные, используя любой метод, который имеет смысл (curl и т. Д.), И возвращает его точно как есть.Затем вы можете использовать обычный AJAX для вызова собственной конечной точки сервера (тот же сервер = не нарушает ту же политику происхождения).

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