【问题标题】:Flex Post to php pageFlex 发布到 php 页面
【发布时间】:2013-02-28 16:48:46
【问题描述】:

我正在尝试将一些数据从我的 flex 应用程序发布到要保存的 PHP 脚本。

作为一个简单的测试,我制作了这样的 php 脚本

<?php
if ($_POST) {

    $message = "Text:" . $_POST['Text'];

    mail('vince@myemailaddress.com', 'POSTED!', $message);

} else {
    mail('vince@myemailaddress.com', 'No Post Test', 'Testing..');
}

?>

如果我在浏览器中点击脚本,我会收到一封电子邮件。但是当我调用我的 flex 函数时,我什么也没得到? 我做错了吗?

private function onTextMessageRecv(event:AsyncDataEvent):void
{
  var dialogID:String = event.data;
  var strFrom:String = event.data2;
  var strTime:String = event.data3;
  var MessageStr:String = event.data4;

  var variables:URLVariables = new URLVariables()
  variables.From = strFrom;
  variables.To = m_strUserDisplayName;
  variables.Text = MessageStr;
  saveIMdata( variables);

}

private function saveIMdata( variables:URLVariables):void 
{
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Saving IM...");
    var myData:URLRequest = new URLRequest("http://im.vlowe.co.uk/save.php")
    myData.method = URLRequestMethod.POST
    myData.data = variables
    var loader:URLLoader = new URLLoader()
    loader.dataFormat = URLLoaderDataFormat.VARIABLES
    loader.load(myData)
}

我确实看到“正在保存 IM...”的日志条目,但没有电子邮件?

感谢您的帮助。

更新: 试过这个..但似乎两个事件都没有触发?

private function saveIMdata( variables:URLVariables):void 
{
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Saving IM...");
    var myData:URLRequest = new URLRequest("http://im.vlowe.co.uk/save.php");
    myData.method = URLRequestMethod.POST;
    myData.data = variables;
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, variables.Text);
    var loader:URLLoader = new URLLoader();

    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Loaded?...");
    loader.addEventListener(Event.COMPLETE, onLoadComplete);
    loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);

    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.load(myData);
}

private function onLoadComplete(e:Event):void
{
    var loader:URLLoader = URLLoader(e.target);
    trace(loader.data);
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Load completed");
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, loader.data.toString());
}

private function onLoadError(e:IOErrorEvent):void
{
    trace(e.text);
    LogAddItem( LOG_CATEGORY_MAIN_DEBUG, "Error " + e.text);
}

更新 2: 我的跨域.xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all"/>
    <allow-access-from domain="*" to-ports="80,843,8080,8081,8082" secure="false"/>
</cross-domain-policy>

【问题讨论】:

    标签: actionscript-3 apache-flex flex3


    【解决方案1】:

    听起来像是跨域安全问题。

        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        private function securityErrorHandler(event:SecurityErrorEvent):void {
           trace("securityErrorHandler: " + event);
        }
    

    [编辑]

    这不存在http://im.vlowe.co.uk/crossdomain.xml

    您的 crossdomain.xml 应该如下所示。删除文档类型

    <?xml version="1.0" encoding="UTF-8"?>
    <cross-domain-policy>
        <allow-access-from domain="*.someDomain.com"/>
    </cross-domain-policy>
    

    【讨论】:

    • 我确实收到了一个错误.. [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"
    • crossdomain.xml 需要位于您将数据发布到的服务器的根目录中。发布了编辑
    【解决方案2】:

    将错误和完整的处理程序添加到您的 URLLoader 并测试 php 文件是否已加载:

    loader.addEventListener(Event.COMPLETE, onLoadComplete);
    loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
    
    private function onLoadComplete(e:Event):void
    {
        var loader:URLLoader = URLLoader(e.target);
        trace(loader.data);
    }
    
    private function onLoadError(e:IOErrorEvent):void
    {
        trace(e.text);
    }
    

    在您的 php 文件中回显某些内容,您应该在 onLoadComplete 函数中看到它。

    【讨论】:

    • 您等了多长时间?如果服务器没有响应,有时需要一段时间才能触发错误处理程序。
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多