我在其画布页面explained here上嵌入了与Facebook相同的用户/游戏用例。我想将包含JSON对象的HTTP POST请求发送到外部托管站点,并将响应加载到iframe
,described here。
到目前为止,我已经尝试了以下内容:
form
进行发布,使用target
属性将结果加载到iframe中。 form
的字段在这里不是JSON(如果我尝试转换它们,我将不得不手动发送POST请求,问题由下一个要点解释)$.ajax()
或$.post()
,但我无法在iframe
中加载响应。如果我尝试使用jQuery手动将其插入DOM,显然相对链接将无效。src
上设置iframe
属性,但这只允许GET请求。正如您所看到的,我只能设法获得3个所需属性中的最多2个。有谁知道怎么做(或Facebook怎么做)?
答案 0 :(得分:1)
如果有人遇到同样的问题,我就找到了这个:
根据this,Facebook最有可能做到以下几点:他们提交一个(隐藏的)form
,其中一个参数名为“signed_request”,完整的JSON对象编码为Base64字符串。借助target
的{{1}}属性,响应会自动加载到form
。 iframe
也可以动态创建,并在jQuery的帮助下插入到DOM中。
另一种解决方案可以如下工作:首先将带有JSON数据的AJAX请求发送到外部站点。然后,该站点构造响应,对其进行缓存并使用可以加载响应的URL进行回复。然后将form
的{{1}}属性设置为此URL,该URL使用HTTP GET请求加载原始响应。
我使用了第二种方法,因为我必须使用动态更改的数据提交多个请求,并且不希望每次都编辑DOM。我还使用this stackoverflow answer中的建议,在我的src
中加载回复时不会留下浏览器历史记录条目。