2011-06-20 46 views
0

我在Mac OS X上使用Chrome 12,並且在文檔中包含了jQuery 1.6.1。HTML5文件API:發生錯誤後FileReader對象未定義

我嘗試使用以下代碼讀取文件,在讀取文件時發生錯誤接縫,因此調用this.error.onerror(),但FileReader-Object this.reader不再存在,並且我無法得到錯誤。我也不確定錯誤發生的原因,這是我想要閱讀的常規文本文檔。

function FileHandler(files, action) { 
    console.log('FileHandler called.'); 

    this.files = files; 
    this.reader = new FileReader(); 
    this.action = action; 

    this.handle = function() { 
     console.log('FileHandler.handle called.'); 

     for (var i = 0; i < this.files.length; i++) { 
      this.reader.readAsDataURL(files[i]); 
     } 
    } 

    this.upload = function() { 
     console.log('FileHandler.upload called.'); 
     console.log(this.reader); 

     data = { 
      content: this.reader.result 
     } 

     console.log(data); 
    } 

    this.error = function() { 
     console.log('An error occurred while reading a file.'); 
     console.log(this.reader.error); 
    } 

    this.reader.onload = this.upload; 
    this.reader.onerror = this.error; 
} 

此代碼創建以下控制檯輸出: http://cl.ly/0j1m3j0o3s071Y1K3A25

+0

如果你舉辦一個網絡服務器上的文件,做你有同樣的問題?如果您使用FF代替Chrome,那麼您是否遇到同樣的問題?如果沒有,那麼你可能會遇到Chrome的同源策略。在這裏看到答案和評論:http://stackoverflow.com/questions/4100927/chrome-filereader/4101266#comment10572715_4101266 –

回答

0

.onerror,該this是不一樣之外,因爲它是一個新的功能(以新的範疇)。通過靜態設置像這樣的this

跟蹤:

var _this = this; // _this won't change 
this.reader.onerror = function() { 
    console.log('An error occurred while reading a file.'); 
    console.log(_this.reader.error); 
} 
+0

我已經更新了代碼,我認爲它應該工作(至少它適用於this.upload )。但錯誤仍然發生,控制檯輸出相同。 –

+0

你確定它是'undefined'嗎?請注意'_this'應該在'.error'之外定義。 – pimvdb

+0

請問您指的是'多個物體'究竟是什麼意思? – pimvdb

0

這應該是正確的方式做到這一點:

reader.onerror = function(event) { 
    console.error("File could not be read: " + event.target.error); 
}; 
相關問題