2012-05-10 43 views
0

我在想,如果我能得到什麼,最好的辦法做到以下幾點將是...的Javascript調用閃存功能上傳文件

我目前從JavaScript調用一個Flash AS3函數(使用jQuery SOM建議)這個函數上傳一個已經在這個Flash文件中被選中的文件。 Flash然後上傳文件並調用處理處理文件的php文件(upload.php)。這一切工作正常。然而,還有其他與上傳文件有關的詳細信息(由用戶在文本框中輸入)。所有這些數據(包括上傳文件的路徑)都必須保存到數據庫中。這可以通過調用另一個php文件(processData.php)的ajax來完成。我的問題是,當我上傳文件時,我無法通過Flash發送其他詳細信息(至少不是我知道的),從而導致執行2個不同的PHP腳本。其次,通過ajax調用的另一個php腳本沒有文件信息添加到數據庫。如果我想要的話,我可以將這些信息存儲在會話中,但它似乎並不能說服我作爲解決此問題的最佳方式。任何其他想法或建議?

我有很多代碼可以避免讓這個問題變得非常棘手JS後面的部分我認爲很重要,一些Flash片段讓你可以瞭解發生了什麼...如果的theres anyhting否則你幾乎看到代碼的隨意問及生病後它...

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); 
    } 

* *注意:並非所有的Flash代碼都顯示,因爲有很多。我提出我認爲需要了解究竟發生了什麼。

如果有什麼我可以添加進一步的細節請讓我知道。提前致謝!

+0

我很困惑你爲什麼使用Flash? –

回答

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); 
    } 
}); 

希望它能幫助。

+0

非常感謝你們! :) –