JavaScript не может получить доступ к моему API запросов - PullRequest
0 голосов
/ 09 января 2012

Я создал приложение с Google App Engine, которое:

  1. Запрашивает URL (например, http://myapp.appspot.com/query?name="SomeName"&start_date="2012-01-01")
  2. Получает ответ в формате JSON. Этот ответ JSON содержит данные из моего собственного хранилища данных в том же домене.
  3. Построение диаграммы с использованием этого ответа.

Конфигурация app.yaml имеет следующие строки:

- url: /.*
  script: main.py

Где в main.py я назначил URL query для обработки классом QueryHandler.

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

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

Попытки решения

  1. Если я изменю URL запроса на http://localhost:8080/query?name="SomeName"&start_date="2011-01-01", диаграмма будет отображаться нормально.
  2. Если я настаиваю на запросе URL-адреса в облаке http://myapp.appspot.com/query?name="SomeName"&start_date="2012-01-01", я не могу отобразить диаграмму.

Цель

Я бы хотел иметь возможность запрашивать URL-адрес облака без необходимости менять домен на localhost. Это будет полезно для меня в долгосрочной перспективе, когда я решу открыть публичный API. Есть способ сделать это? Или это просто ограничение на сервере разработки?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Поскольку вы, очевидно, управляете сервером, который генерирует JSON, вы можете обойти SOP , обслуживая JSONP, что не является дополнительной работой.Просто проверьте параметр обратного вызова и оберните свой вывод в имя fucntion, переданное как обратный вызов.См. JSONP .

1 голос
/ 09 января 2012

Ваш javascript должен всегда отправлять запросы обратно на сервер, с которого он был загружен.

Используйте window.location.hostname и window.location.port для получения сервера хоста и порта источника.

...