Подтвердить что ты не робот

Origin 'url' не разрешен Access-Control-Allow-Origin

Я пытаюсь получить курс валюты с помощью Google Currency Calculator, используя следующий код jquery (фиктивный):

    $.getJSON("http://www.google.com/ig/calculator?hl=en&q=1" + "DOP" + "=?" + "USD",
        function(data) {
            $('.currNumber').each(function (index) {
                $(this).html(parseFloat($(this).html()) * 0.02681);
                                  });
          });

XMLHttpRequest не может загрузить http://www.google.com/ig/calculator?hl=en&q=1DOP=?USD. Происхождение "hostURL" не разрешено Access-Control-Allow-Origin.

Глядя на сайт, я нашел различные темы по этому вопросу, но они в основном относятся к локальному доступу к файлу и пытаются решить его, запустив хром с дополнительным параметром (я также использую хром), но это не моя проблема, что на самом деле больше связано с междоменными ограничениями.

Итак, вопрос: как я могу использовать jQuery для получения ставки из этого URL?

4b9b3361

Ответ 1

Запросы Ajax ограничены браузером Одинаковая политика происхождения. В двух словах это означает, что вы не можете напрямую разговаривать с сервером через ajax, который не находится в том же домене, что и страница, на которой запущен ваш script. Таким образом, если вы не разрабатываете страницу для google.com, вы не можете напрямую общаться с google.com.

Существуют ограничения для этого ограничения, связанные с вставкой тегов script (JS файлы, загруженные с помощью тегов script, не подпадают под одну и ту же политику происхождения), а затем с использованием обратных вызовов JSONP для передачи данных обратно в ваш основной script из тегов script. Вероятно, это то, что вам нужно сделать здесь, если API, который вы пытаетесь использовать, поддерживает его.

jQuery поможет вам здесь много, так как он автоматически может превратить вызов ajax в вызов JSONP, загружаемый с помощью тегов script, и может работать в ситуациях с перекрестными доменами. Согласно jQuery doc для него ajax-функции, он будет делать это автоматически, если видит строку "callback =" в строке параметров для вызова ajax или если вы установите параметр crossDomain.

Ответ 2

Edit
Я думал, что было ясно, в чем проблема, но, похоже, это не так. Эта ошибка, которую вы видите, - это сервер, ограничивающий доступ вашего домена к ресурсам через запросы ajax. Это стандартная безопасность JavaScript - ваш script может общаться только с доменом, из которого он произошел. Поскольку ваш JavaScript не был загружен из доменов Google, он не входит в список доменов, которым разрешен доступ к API калькулятора через ajax и почему вы видите это сообщение об ошибке.

Параметры для создания междоменных запросов с помощью jQuery описаны здесь. Как я упоминал ранее, JSONP будет только допустимым вариантом, если сервер поддерживает его, потому что он должен отправить обратно соответствующим образом отформатированный JSON.


Это может помочь, если вы предоставили ссылки на страницы, на которые вы ссылаетесь.

От взглядов вещей, однако, этот API не поддерживает JSONP (если не имеется недокументированный параметр), который в значительной степени ваш единственный вариант для кросс-доменных запросов ajax в этом случае, так как вы не контролируете сервер и не можете изменить заголовки управления доступом .

Возможно, вам захочется создать серверный ресурс, который будет обращаться к этому API для вас, не будучи ограниченным моделью безопасности JavaScript, например PHP script здесь.

Ответ 3

По этой ссылке - http://api.jquery.com/jQuery.ajax/ - ранее предоставленный jfriend00 - объясняет параметр, который вы можете включить в запрос JQuery ajax называемый "crossDomain", который является булевым.

crossDomain (по умолчанию: false для запросов одного домена, true для междоменных запросов) Тип: Boolean Если вы хотите принудительно выполнить запрос crossDomain (например, JSONP) в том же домене, установите для параметра crossDomain значение true. Это позволяет, например, перенаправить серверную сторону в другой домен. (версия добавлена: 1.5)

Поэтому установка этого значения в true должна решить (?) это. Я не эксперт, но я пробовал это после постоянного использования этой проблемы и, похоже, решил проблему.

Пример:

$.ajax({ //my ajax request
        url: "_URL_I_AM_MAKING_REQUEST_TO_",
        type: "GET",
        cache: false,
        dataType: "json",
        **crossDomain: true,**
        data: { _mydata_
        success : function(response){}
});

Ответ 4

Незначительная дополнительная информация.

Я добрался до этого вопроса, потому что у меня эта ошибка пыталась отправить на мой собственный сервер.

Решение: убедитесь, что имя хоста совпадает с вызовом ajax.

Exmaple:

//This failed

$.post("http://domain.com/index.php/count/",

//This succeeded (the page this was called from was www.domain.com/.....)

$.post("http://www.domain.com/index.php/count/",