0

現在、Web サイトのデータベースからフラッシュ アプリケーションに一連のハイスコアの行をロードしようとしています。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

4

1 に答える 1

0

PHPとの通信に使用しているクラスについては言及していませんでしたが、どのクラスにも失敗を評価するためのメソッドがあります。失敗の応答を見てください。

たとえば、URLRequest クラスは、問題を診断するためにキャッチできるあらゆる種類のエラーをスローできます。Adobeリファレンスで見つけたコードを次に示します...

次の例では、新しい 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 では、右クリック > [要素の検査] > [コンソール] タブ)。エラーを見てください。セキュリティ制限が発生した場合、ブラウザがエラーをスローすることもあります。

于 2013-11-06T12:50:33.710 に答える