Facebook如何发布json并在iframe中加载响应?

时间:2013-09-24 12:43:45

标签: jquery ajax json forms iframe

我在其画布页面explained here上嵌入了与Facebook相同的用户/游戏用例。我想将包含JSON对象的HTTP POST请求发送到外部托管站点,并将响应加载到iframedescribed here

到目前为止,我已经尝试了以下内容:

  • 使用form进行发布,使用target属性将结果加载到iframe中。 form的字段在这里不是JSON(如果我尝试转换它们,我将不得不手动发送POST请求,问题由下一个要点解释)
  • 手动发布JSON,例如使用jQuery的$.ajax()$.post(),但我无法在iframe中加载响应。如果我尝试使用jQuery手动将其插入DOM,显然相对链接将无效。
  • src上设置iframe属性,但这只允许GET请求。

正如您所看到的,我只能设法获得3个所需属性中的最多2个。有谁知道怎么做(或Facebook怎么做)?

1 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题,我就找到了这个:

根据this,Facebook最有可能做到以下几点:他们提交一个(隐藏的)form,其中一个参数名为“signed_request”,完整的JSON对象编码为Base64字符串。借助target的{​​{1}}属性,响应会自动加载到formiframe也可以动态创建,并在jQuery的帮助下插入到DOM中。

另一种解决方案可以如下工作:首先将带有JSON数据的AJAX请求发送到外部站点。然后,该站点构造响应,对其进行缓存并使用可以加载响应的URL进行回复。然后将form的{​​{1}}属性设置为此URL,该URL使用HTTP GET请求加载原始响应。

我使用了第二种方法,因为我必须使用动态更改的数据提交多个请求,并且不希望每次都编辑DOM。我还使用this stackoverflow answer中的建议,在我的src中加载回复时不会留下浏览器历史记录条目。