Как решить No-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". 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: *, тогда приведенный выше код начал работать...

enter image description here

Даже если бы я попробовал с железом-ajax-демо, то получится тот же результат. что происходит здесь. Я один человек, получивший эту ошибку во вселенной.

Ответы

Ответ 1

Вы можете решить эту проблему, используя 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.

Ответ 2

Вам нужно будет использовать jsonp - подробнее об этом здесь https://en.wikipedia.org/wiki/JSONP

Demo

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

    }
});

Результат

enter image description here

Однако я не вижу опции в Polymer iron-ajax handleAs для jsonp, но попробуйте доступные опции

https://elements.polymer-project.org/elements/iron-ajax

Я осмотрелся и там byutv-jsonp

Элемент byutv-jsonp() предоставляет сетевой запрос функциональность. Это элемент Polymer v1.0 +, который облегчает создание Запросы JSONP. Он использует поведение Polymer (Byutv.behaviors.Jsonp). Это с рисунком после элемента полимерного железа-ajax(). В нем есть были протестированы с использованием модульных испытаний. Это часть группы BYUtv Elements элементов.

https://github.com/coderfin/byutv-jsonp

Ответ 3

Я попробовал JSONP, но это не сработало для меня. Затем я запустил браузер Chrome в режиме безопасности в Интернете и Access-Control-Allow-Origin для стороннего URL-адреса, вызываемого через запросы AJAX, которые были решены для меня.

Обратите внимание, что это временное исправление в среде разработки, и оно будет работать только для Chrome.

  • Создайте ярлык Google Chrome на рабочем столе или в другом месте
  • Щелкните правой кнопкой мыши на нем > Выбрать свойства
  • Измените target следующим образом:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security