0

我想知道我是否可以就以下最佳方法获得一些建议...

我目前正在从 Javascript(使用 jQuery)调用 Flash AS3 函数,此函数上传已在此 Flash 文件中选择的文件。Flash 然后上传文件并调用处理处理后的文件的 php 文件 (upload.php)。这一切都很好。但是,还填写了与上传文件有关的其他详细信息(由用户在文本框中输入)所有这些数据,包括文件上传位置的文件路径,都必须保存到数据库中。这可以通过对另一个 php 文件 (processData.php) 的 ajax 调用来完成。我的问题是,当我上传文件时,我无法通过闪存发送其他详细信息以及文件(至少我不知道),这会导致执行 2 个不同的 php 脚本。其次,通过 ajax 调用的其他 php 脚本没有要添加到数据库的文件信息。如果我愿意,我可以将此信息存储在会话中,但这似乎并不能说服我作为解决此问题的最佳方式。还有其他想法或建议吗?

我有相当多的代码,以避免使这个问题成为一个巨大的问题,我会发布我认为很重要的 JS 部分和一些 flash 片段,这样你就可以了解发生了什么......如果还有其他问题喜欢看代码随时问和生病发布它......

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 函数/方法注册为可从容器调用:

动作脚本

...
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 回答