0

次のことを行うための最良のアプローチが何であるかについて、いくつかの提案を得ることができるかどうか疑問に思っていました...

私は現在、JavaScript から (jQuery を使用して) Flash AS3 関数を呼び出しています。この関数は、この Flash ファイルで既に選択されているファイルをアップロードします。その後、Flash はファイルをアップロードし、処理されたファイルを処理する php ファイル (upload.php) を呼び出します。これはすべてうまくいきます。ただし、アップロードされたファイルに関連するその他の詳細が入力されます (ユーザーがテキスト ボックスに入力します)。アップロードされた場所へのファイル パスを含むすべてのデータは、DB に保存する必要があります。これは、別の php ファイル (processData.php) への ajax 呼び出しによって実行できます。私の問題は、ファイルをアップロードするときに、フラッシュを介してファイルとともに他の詳細を送信できないことです(少なくとも私が知っていることではありません)。これにより、2つの異なるphpスクリプトが実行されます。次に、ajax を介して呼び出される他の php スクリプトには、DB に追加するファイル情報がありません。必要に応じてこの情報をセッションに保存できますが、これを行うための最良の方法として私を説得することはできません。他のアイデアや提案はありますか?

私が持っているコードがかなりあるので、これを巨大な質問にするのを避けるために、私が重要だと思うJS部分とフラッシュのいくつかのスニペットを投稿して、何が起こっているのかを知ることができます...コードを確認したい場合は、お気軽に質問して投稿してください...

JS:

$("#uploadAudio").submit(function(event) {
    event.preventDefault();

    var form = $(this);
    var title = form.find("#title").val();
    var desc = form.find("#desc").val();

    var flash = $("#flash");

    var flashFileSet = flash.get(0).jsIsFileSelected();

    if(flashFileSet)
    {
        $.ajax({
            type: "POST",
            url: "processData.php",
            dataType: "text",
            data: "title=" + title + "&desc=" + desc,
            async: false,
            success: function() {
                audFile.get(0).jsUploadFile();
            }
        });
    }
});

閃光

public function fUploader(){
        req = new URLRequest();
        req.url = ( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : 'http://virtualmanagementonline.com/ajax/audUpload.php';
        pFilterType = ( stage.loaderInfo.parameters.filterType )? stage.loaderInfo.parameters.filterType : 'Images';
        pFileFilters = ( stage.loaderInfo.parameters.fileFilters )? stage.loaderInfo.parameters.fileFilters : '*.jpg;*.jpeg;*.gif;*.png';
        file = new FileReference();
        setup( file );
        select_btn.addEventListener( MouseEvent.CLICK, browse );
        progress_mc.bar.scaleX = 0;
        tm = new Timer( 1000 );
        tm.addEventListener( TimerEvent.TIMER, updateSpeed );
        cancel_btn.addEventListener( MouseEvent.CLICK, cancelUpload );
        cancel_btn.visible = false;

        ExternalInterface.addCallback("jsUploadFile", uploadFile);
        ExternalInterface.addCallback("jsIsFileSelected", IsFileSelected);
    }

public function browse( e:MouseEvent ){
        filefilters = [ new FileFilter(pFilterType, pFileFilters) ];            file.browse( filefilters );
    }

private function selectHandler( e:Event ){
        var tf = new TextFormat();
        tf.color = 0x000000;
        label_txt.defaultTextFormat = tf;
        label_txt.text = file.name;
        //file.upload( req );
    }

    public function IsFileSelected():Boolean{
        if(label_txt.text != "")
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public function uploadFile():void{
        file.upload(req);
    }

* *注:フラッシュ コードはたくさんあるので、すべてを示しているわけではありません。正確に何が起こっているのかを理解するために必要だと思ったものを掲載しました。

詳細について追加できるものがあれば、お知らせください。前もって感謝します!

4

1 に答える 1

1

が利用可能であるため、フラッシュしたいデータをいくつでも送信ExternalInterfaceできます。
ActionScript 3 Referenceには、 について次のように記載されていますExternalInterface

HTML ページの JavaScript から、次のことができます。
- ActionScript 関数を呼び出します。
- 標準の関数呼び出し表記を使用して引数を渡します。
- JavaScript 関数に値を返します。

コンテナから呼び出し可能な ActionScript 関数/メソッドを登録するだけです。

ActionScript

...
ExternalInterface.addCallback("jsUploadFile", uploadFile);
...

public function uploadFile (title:String, desc:String):void
{
    var infos:URLVariables = new URLVariables();
    infos.desc = desc;
    infos.title = title;

    /* When you pass the URLVariables to data property of URLRequest,
      all variables associated with the URLVariables object will be
      sent to the server along with the image uploaded. */
    req.data = infos;

    file.upload(req);
}


次に、コンテナー (HTML) から呼び出して、追加情報をパラメーターとして渡します。

JavaScript

$("#uploadAudio").submit(function(event) {
    event.preventDefault();

    var form = $(this);
    var title = form.find("#title").val();
    var desc = form.find("#desc").val();

    var flash = $("#flash");

    var flashFileSet = flash.get(0).jsIsFileSelected();

    if(flashFileSet)
    {
       /* Instead of sending title and desc to the server via ajax, pass
          them as parameters to the jsUploadFile method. So
          you can handle everything in one place */
       audFile.get(0).jsUploadFile(title, desc);
    }
});

それが役に立てば幸い。

于 2012-05-10T04:46:14.933 に答える