我的canvas / iframe Facebook应用程序中有一个简单的表单,我正在尝试将值传递给POST。现在从阅读所有关于S.O的全部内容。和FB的最新文档,据我所知,所有通过POST表单发送的数据都可以在$ _REQUEST对象的接收端访问。
我还在S.O.的另一个帖子上读到。为了使POST表单工作,你需要传递一个名为“signed_request”的输入,其值为当前的signed_request(我已经签名的请求工作正常,否则......所有登录和身份验证的工作正常)。官方FB文档中没有提到这一点。
所以我的问题是$ _REQUEST对象中的所有内容都是签名请求,以及一堆其他会话内容。我的表单输入无处可寻。
我能阅读它们的唯一方法是将表单的方法设置为“REQUEST”,这甚至不是真正的表单方法。但接下来它需要我的所有输入并将它们作为GET args发送到URL中。可怕。这是我的画布应用程序中的一个示例页面,其中只有一个用于尝试调试的表单(省略所有身份验证内容):
<form enctype="application/x-www-form-urlencoded" method="POST" target="_top" id="my_form" action="https://apps.facebook.com/myfakeapp/form_test.php">
<input type="text" name="test1" value="58" />
<input type="text" name="test2" value="123" />
<input type="text" name="test3" value="434" />
<input type="text" name="test4" value="645" />
<input type="text" name="signed_request" value="<? echo $_REQUEST['signed_request']; ?>">
<input value="Submit Answers" type="submit">
</form>
FB文档让人感到困惑,因为其中一些文档指的是这种beta版本迁移模式,它们用于处理canvas应用程序POST请求的旧应用程序。
答案 0 :(得分:1)
您正在组合两种不同的技术...提交带有target = _top和action = apps.facebook.com / xxx的表单的目的是让Facebook自动发送signed_request参数。如果您自己发送,则应使用页面的“外部”地址作为操作,并关闭目标属性。通过使用target = _top,您将重新加载整个框架并将表单数据发送到Facebook,这当然会忽略它。