【问题标题】:Flash getting data from a remote server with PHP and MySQLFlash 使用 PHP 和 MySQL 从远程服务器获取数据
【发布时间】:2013-11-06 20:50:33
【问题描述】:

我目前正在尝试将一堆高分行从我的网站数据库加载到我的 Flash 应用程序中。我正在使用 PHP 从 MySQL 数据库中检索数据并将其返回到闪存。当我在 Flash Pro 中调试我的应用程序时,一切正常,并且返回了数据。

但是,当我发布 swf 并双击它时,它只显示空白屏幕,没有任何反应。当我删除访问 PHP 脚本的代码时,它可以工作,但没有检索到数据。

我在我的 htdocs 文件夹中添加了一个 crossdomain.xml。这是xml的内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="master-only"/>
  <allow-access-from domain="*"/>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

但它仍然无法正常工作......

感谢任何帮助。 THX b4

【问题讨论】:

  • 嗯,对不起,你所说的“古怪”是什么意思?对不起,如果这是菜鸟问题

标签: php mysql actionscript-3 flash cross-domain


【解决方案1】:

您没有提到您使用哪个类与 PHP 进行通信......但是无论它是什么类也将具有评估失败的方法。查看失败响应。

例如,URLRequest 类可以抛出各种错误,这些错误可以被捕获以诊断问题。这是我在Adobe reference上找到的一些代码...

下面的示例创建一个新的 Loader 对象,并向其传递一个包含 XML 文件路径的 URLRequest 对象。如果加载操作成功,则会调度一个 complete 事件,并将 XML 文件中的数据跟踪到输出。 其他事件处理程序捕获其他事件,包括错误事件。

要运行此示例,请将名为 XMLFile.xml 的文件与 SWF 文件放在同一目录中。

package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;

public class URLRequestExample extends Sprite {
    private var loader:URLLoader;
    
    public function URLRequestExample() {
        loader = new URLLoader();
        configureListeners(loader);

        var request:URLRequest = new URLRequest("XMLFile.xml");
        try {
            loader.load(request);
        } catch (error:Error) {
            trace("Unable to load requested document.");
        }
    }

    private function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
        dispatcher.addEventListener(Event.OPEN, openHandler);
        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    }

    private function completeHandler(event:Event):void {
        var loader:URLLoader = URLLoader(event.target);
        trace("completeHandler: " + loader.data);
    }

    private function openHandler(event:Event):void {
        trace("openHandler: " + event);
    }

    private function progressHandler(event:ProgressEvent):void {
        trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void {
        trace("securityErrorHandler: " + event);
    }

    private function httpStatusHandler(event:HTTPStatusEvent):void {
        trace("httpStatusHandler: " + event);
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
    }
}
}

一种更快的方法是简单地打开浏览器的调试控制台(例如,在 Chrome 中,右键单击 > 检查元素 > 控制台选项卡)。看看错误;如果出现安全限制,浏览器也可能会抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2012-04-02
    相关资源
    最近更新 更多