2013-09-24 2 views
0

У меня есть тот же прецедент, что и Facebook для приложений/игр, встроенных на их полотном страницы explained here. Я хочу отправить HTTP POST-запрос, содержащий объект JSON, на внешний сайт и загрузить ответ в iframe, как described here.Как Facebook отправляет json и загружает ответ в iframe?

До сих пор, я попытался следующие:

  • POSTING с form, используя атрибут target, чтобы загрузить результат в качестве фрейма. Поля form здесь не JSON (и если я попытаюсь их преобразовать, я должен будет отправить запрос POST вручную, с проблемой, объясненной следующей маркой)
  • POSTING JSON вручную, например. с jQuery's $.ajax() или $.post(), но тогда я не могу сделать загрузку ответа в своем iframe. И если я попытаюсь вставить его в DOM вручную с помощью jQuery, очевидно, относительные ссылки не будут работать.
  • Установка свойства src на iframe, но это разрешает только запросы GET.

Как вы можете видеть, мне удается получить не более 2 из 3 желаемых свойств. Кто-нибудь знает, как это сделать (или как это делает Facebook)?

ответ

1

В случае, если кто попадается с той же проблемой, это то, что я нашел:

Согласно this, Facebook, скорее всего, выполняет следующие действия: они представляют собой (скрытый) form с одним параметром с именем «signed_request »и полный объект JSON, закодированный как строка Base64. С помощью атрибута targetform ответ автоматически загружается в iframe. form также можно создавать динамически и вставлять в DOM с помощью, например, jQuery.

Другое решение будет работать следующим образом: Начните с отправки запроса AJAX с данными JSON на внешний сайт. Затем сайт конструирует ответ, кэширует его и отвечает URL-адресом, где может быть загружен ответ. Атрибут srciframe затем устанавливается на этот URL-адрес, который загружает исходный ответ с помощью HTTP-запроса GET.

Я использовал второй подход, так как я должен подавать несколько запросов с динамически изменяющимися данными и не хочу каждый раз редактировать DOM. Я также использовал совет от this stackoverflow answer, чтобы не оставлять запись истории браузера при загрузке ответа в моем iframe.

Смежные вопросы