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

Как я могу использовать JSON на веб-странице из источника ни с CORS, ни с JSONP?

Некоторые сервисы передачи данных JSON в Интернете предназначены для использования только серверами и пренебрегают возможностью использования напрямую веб-приложениями.

Из-за проблем с несколькими сайтами такие службы будут работать, если они либо предоставили JSONP, либо включили CORS.

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

Один пример - одностраничное приложение, которое я создавал, для которого единственный источник данных, который я мог найти, не предоставлял CORS или JSONP. Будучи одностраничным, у него не было собственного сервера, поэтому он подчинялся политике одного и того же происхождения.

Какие стратегии доступны в таких случаях?

4b9b3361

Ответ 1

** Один из способов - найти прокси-сервер, который может получить доступ к источнику данных JSON, а затем передать его вашему веб-приложению, преобразованному для работы с JSON, CORS или любым другим форматом, с которым вы можете обращаться без беспокоясь о проблемах, связанных с перекрестными сайтами.

Один из таких прокси-серверов - Yahoo "YQL" .

YQL поддерживает как JSONP, так и CORS.

Итак, если ваш браузер также поддерживает CORS, вы можете думать о нем как о бесплатном прокси-сервере JSON для JSON. Если нет, то это также бесплатный прокси JSON для JSONP:

Вот пример того, как я использовал его с jQuery:

$.getJSON("http://query.yahooapis.com/v1/public/yql",
  {
    q:      "select * from json where url=\"http://airportcode.riobard.com/airport/" + code + "?fmt=JSON\"",
    callback: gotJSON, // you don't even need this line if your browser supports CORS
    format: "json"
  },
  function(data){
    if (data.query.results) {
      /* do something with
        data.query.results.json.code
        data.query.results.json.name
        data.query.results.json.location
      */
    } else {
      /* no info for this code */
    }
  }
);

И версия на jsfiddle...