我觉得这个问题很愚蠢,但我已经和它搏斗了好几个小时,我不知道还有什么地方可以转。
我有一个flash表单,它正在向php脚本发出POST请求,然后显示所述脚本的输出。为简单起见,我们假设这是php脚本:
echo 'Mail sent to: ' . $_POST['recipientEmail'];
当我提交表单时,我会在POST请求行所在的Firebug的网络标签中看到这一点:
Referer: http://example.com/my.swf
Content-type: text/html
Content-length: 68
recipientEmail=example@example.com
表面上一切都很好。帖子已经发布,它将正确的变量发送到脚本。但是当响应回来时,这就是我在Flash跟踪器中看到的内容:
Mail sent to:
换句话说,请求退出浏览器后,$ _POST ['recipientEmail']已丢失。
您认为这里发生了什么?脚本和swf文件都在同一个域中,服务器相同。
编辑:我刚尝试从HTML表单中访问相同的脚本,它捕获了$ _POST标头。所以它只是在它被Flash发送时才捕获它。 Firebug中的post标签看起来与flash有点不同:recipientEmail example@example.com
submit Submit
请注意每个变量都在它自己的行中。
编辑:以下是提交提交的相关AS3代码:
var _gateway:String = Share.getGateway();
var request:URLRequest;
var variables:URLVariables = new URLVariables();
var loader:URLLoader = new URLLoader();
request = new URLRequest(_gateway);
request.contentType = 'text/html';
request.method = URLRequestMethod.POST;
variables.senderName = senderName.text;
variables.recipientEmail = recipientEmail.text;
variables.senderMessage = senderMessage.text;
request.data = variables;
try {
loader.load(request);
}catch (error:Error) {
Debug.trace("Unable to load requested document.");
}
答案 0 :(得分:5)
根据Flash小程序的请求,仔细检查HTTP表单请求的标头。乍一看,我的第一个猜测是“text/html
”内容类型,这对于发送的数据不正确 - 应该是“application/x-www-form-urlencoded
”。请注意,我从未测试过PHP 实际是否关心这个特定的细节,但它肯定是可疑的。
答案 1 :(得分:0)
您可以var_dump($_POST);
(或print_r($_POST);
)查看其中包含的内容吗?
答案 2 :(得分:0)
尝试将$ _POST更改为$ _REQUEST。在我期待$ _POST中的信息之前,我遇到了问题,但它不起作用。将其更改为$ _REQUEST会带来POST,GET和COOKIE的值。
答案 3 :(得分:0)
你在使用.htaccess吗?确保.htaccess不会重写您的请求网址。如果您要发送到http://example.com并且.htaccess会将其重新编写为http://example.com/,例如,您将丢失变量。