Как решить "Нет-Access-Control-Allow-Origin" в полимерном проекте?
Сейчас я осматриваю Polymer-project 1.0
и задача состоит в том, чтобы получить JSON
и распечатать вывод несколько раз.
Но независимо от того, что я пробовал ниже, ошибка приходит, даже я пытался с Github pages
также выдает мне сообщение об ошибке в терминале
ошибка
XMLHttpRequest не может загрузить https://ajax.googleapis.com/ajax/services/search/news?v=1.0&rsz=8&pz=1&cf=all&ned=in&hl=en&topic=tc. В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Поэтому происхождение ' http://rajasimon.github.io/' не разрешено.
Не в тему, а в дизайн материала... Все, что я хочу, - функциональность будет работать в первую очередь. Поэтому я написал ниже код...
index.html
<iron-ajax
auto
url="https://ajax.googleapis.com/ajax/services/search/news?v=1.0&rsz=8&pz=1&cf=all&ned=in&hl=en&topic=tc"
handle-as="json"
last-response="{{ajaxResponse}}"></iron-ajax>
<template is="dom-repeat" items="{{ajaxResponse.responseData.results}}">
<paper-material elevation="1" class="paper-font-body2">
<h1>{{item.title}}</h1>
<iron-image src="[[item.image.url]]" style="width:800px; height:450px; background-color: lightgray;" sizing="cover" preload fade></iron-image>
<p>{{item.content}}</p>
</paper-material>
</template>
Включение
Для отладки я установил приложение Google Chrome с именем Allow-Control-Allow-Origin: *
тогда вышеприведенный код начал работать...
Даже если бы я попробовал с Iron-AJAX, демонстрация даст тот же результат. что тут происходит. Я единственный, кто получает эту ошибку во вселенной.
3 ответа
Вы можете решить эту проблему, используя byutv-jsonp
, Это элемент Polymer 1.0+, который позволяет делать запросы JSONP. Используемый вами API Google поддерживает JSONP. Я проверил приведенный ниже код и получил правильный ответ.
<byutv-jsonp
auto
url="https://ajax.googleapis.com/ajax/services/search/news"
params='{"v":"1.0","rsz":"8","pz":"1","cf":"all","ned":"in","hl":"en","topic":"tc"}'
last-response="{{lastResponse}}"
last-error="{{lastError}}"
debounce-duration="300"></byutv-jsonp>
<template is="dom-repeat" items="{{lastResponse.responseData.results}}">
<paper-material elevation="1" class="paper-font-body2">
<h1>[[item.title]]</h1>
<iron-image src="[[item.image.url]]" style="width:800px; height:450px; background-color: lightgray;" sizing="cover" preload fade></iron-image>
<p>[[item.content]]</p>
</paper-material>
</template>
Важно добавить параметры запроса в params
атрибут вместо url
атрибут с текущей версией (1.2.0) из byutv-jsonp
,
Вам нужно будет использовать jsonp
- больше информации об этом здесь https://en.wikipedia.org/wiki/JSONP
демонстрация
https://jsfiddle.net/1v2z799o/
Код
$.ajax({
url: "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&rsz=8&pz=1&cf=all&ned=in&hl=en&topic=tc",
jsonp: "callback",
// Tell jQuery we're expecting JSONP
dataType: "jsonp",
// Work with the response
success: function( response ) {
console.log(response); // server response
}
});
Результат
Однако я не вижу вариант в Polymer iron-ajax handleAs
за jsonp
но попробуйте доступные варианты
https://elements.polymer-project.org/elements/iron-ajax
Я осмотрелся вокруг и есть byutv-jsonp
Элемент byutv-jsonp () предоставляет функциональные возможности сетевого запроса. Это элемент Polymer v1.0+, который облегчает выполнение запросов JSONP. Он использует поведение полимера (Byutv.behaviors.Jsonp). Он создан по образцу элемента Iron-ajax Полимера (). Он был протестирован с использованием модульных тестов. Он входит в группу элементов BYUtv Elements.
Я старался JSONP
но это не сработало для меня. Затем я запустил браузер Chrome в отключенном режиме веб-безопасности и Access-Control-Allow-Origin
проблема для стороннего URL, вызываемого через запросы AJAX, была решена для меня.
Обратите внимание, что это временное исправление в среде разработки, и оно будет работать только для Chrome.
- Создайте ярлык Google Chrome на рабочем столе или в другом месте.
- Щелкните правой кнопкой мыши на нем> Выбрать свойства
- + Изменить
target
как это:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security
При запуске Chrome вы получите предупреждение о том, что он работает в небезопасном режиме, но вы можете пока его игнорировать и продолжить разработку.
Надеюсь, это работает!
ОБНОВЛЕНИЕ: Команды, которые вы можете попробовать для OSX и Linux/Ubuntu
Будучи пользователем Windows, я не очень уверен в решениях, но вы можете попробовать.
Linux:
$ google-chrome --disable-web-security
Подход командной строки:
chromium-browser --disable-web-security
OSX:
$ open -a Google\ Chrome --args --disable-web-security
Для доступа к локальным файлам, таким как AJAX или JSON, вы также можете использовать этот флаг. Опять же, это строго для целей разработки.
-–allow-file-access-from-files
NB: Вы должны быть осторожны, если вы просматриваете Интернет с отключенной веб-безопасностью. Это сделает ваш компьютер более уязвимым для атак!
Помните, что вам нужно закрыть все экземпляры Chrome и его фоновых приложений, прежде чем запускать его в --disable-web-secutiry
Режим. Дайте мне знать, если это решит вашу проблему.