удаленный запрос getJSON без JSONP - Сервер - PullRequest
2 голосов
/ 23 ноября 2010

Я пытаюсь вызвать JSON-данные с удаленного Сервера, но сервер не возвращает действительные данные, сформированные JSONP, только действительные данные JSON. (подтверждено валидаторами)

Если я сделаю запрос getJSON (с & callback =?), Я получу верный JSON, но он не вызовет функцию обратного вызова, потому что это недопустимый JSONP.

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

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

Да, это отстой. У меня та же проблема с Viddler API (сторона браузера). Он отправляет данные JSON обратно, но не в скриптовом интерфейсе JSON-P.

Таким образом, у вас есть два варианта:

  1. Как уже говорили, используйте внутренний прокси-сервер для выполнения запросов на стороне сервера.
  2. Если вам требуется поддержка только одного браузера (в моем случае Chromium), используйте что-то вроде « chromium-browser --disable-web-security » для отключения правила «same-origin-policy» , Это позволит вам делать междоменные запросы, но только для этой очень специфической ситуации.

Удачи, мужик!

2 голосов
/ 23 ноября 2010

Нет, это должны быть данные JSONP из-за того, как все это работает, в основном это включает файл JavaScript путем создания тега <script> ... и этот ответ должен быть действительным JavaScript, литералом объекта (сам по себе)) недопустимый JavaScript.

Подумайте об этом иначе: если мы могли бы получить JSON с удаленного сервера, почему JSONP существует?:)

1 голос
/ 25 ноября 2010

Ну, во-первых, если ваш сервер, с которого вы получаете JSON, не поддерживает JSONP, вам придется использовать прокси.Если он поддерживает JSONP, вам следует отформатировать ваш запрос, как в примере ниже.Если вы не указываете обратный вызов в $ .getJSON (... & callback =?), Тогда ваш запрос выглядит следующим образом:

http://someurl?callback=123489234982

с каким-то нелепым числом в конце, и это делает вашжизнь боль.Итак, вы должны указать обратный вызов и отформатировать ваш код следующим образом:

<script>
     $.getJSON("your url?callback=callbackName", ....);

     function callbackName { do what you want with the json in here }
</script>

, если это не работает, то ваш сервер не поддерживает JSONP :( вот ссылка на прокси php, которую вы могли быиспользовать это довольно хорошо и имеет много документации.

http://benalman.com/projects/php-simple-proxy/

...