2011-07-09 117 views
4

我想修改的例子http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-reading-files使功能handleFileSelect(EVT)返回reader.result;我的意思是使圖像等功能返回base64。 我試圖把它與寫的功能,但它返回null只:( 所以我的問題是,如何讓函數返回的base64?JS函數返回空值 - 幫助

至於現在我試着寫這個片段中......

function handleFileSelect(evt) { 
    var files = evt.target.files; // FileList object 

    // Loop through the FileList and render image files as thumbnails. 
    for (var i = 0, f; f = files[i]; i++) { 

     // Only process image files. 
     if (!f.type.match('image.*')) { 
     continue; 
     } 

     var reader = new FileReader(); 

     // Closure to capture the file information. 
     reader.onload = (function(theFile) { 
     return function(e) { 
      // Render thumbnail. 
      var span = document.createElement('span'); 
      span.innerHTML = ['<img class="thumb" src="', e.target.result, 
          '" title="', theFile.name, '"/>'].join(''); 
      document.getElementById('list').insertBefore(span, null); 
     }; 
     })(f); 

     // Read in the image file as a data URL. 
     reader.readAsDataURL(f); 
    } 
    return reader.result; 
    } 

所有有用的意見是讚賞:)

+0

19個問題,接受的答案? – CharithJ

+0

請發帖給出問題的代碼。 – deceze

回答

2

我不知道詳細的FileReader對象,但看起來它從URL中讀取數據不同步。這意味着當你的函數返回reader.result時,FileReader對象還沒有完成讀取文件。直到調用onload回調(或其他一些錯誤情況發生)纔會結束。

所以,你的函數返回,而讀數仍將異步發生。因此結果尚未確定。結果可以在onload回調或(我猜),在表示錯誤條件(onabort,onerror等)的其他回調內部可用。

+0

我也這麼認爲。但我想如何讓它返回結果? – user592704

+1

您不能從該函數返回結果。如果你想知道結果,那麼你必須鉤住各種事件處理程序(你已經在鉤上onload),然後從這些事件處理程序中,可以將結果傳達給你需要傳達的結果。這是異步編程 - 你必須以不同的方式做。 – jfriend00

+0

@ jfriend00 yep ... @ user592704這是javascript編程的新範例。它可能看起來像C,但它不是C. – jcolebrand