2014-12-17 4 views
-1
<html> 
    <head> 
     <meta charset="utf-8"> 
     <script src="dist/localforage.js"></script> 
     <script type="text/javascript"> 
     "use strict" 
     var value1; 
     var $id = function(id) { return document.getElementById(id); } 
     var certArr;   
     window.onload = function() 
     { 
      $id("read-button").addEventListener("change", onChangeFile, false); 
     };  
     function onChangeFile(e) { 
      alert("aaaaddffd"); 
      var file = e.target.files[0]; 
      var reader = new FileReader(); 
      reader.onload = function(e) { 
       var Oribuf = e.target.result; 
       var certArr = new Uint8Array(Oribuf); 
       alert(certArr); 
      };  
      reader.readAsArrayBuffer(file);  
      alert("aaaa: " + certArr); 
      readFile(certArr); 
     };  
     function readFile(arrData) { 
      // Here. Why this alert Undefined? 
      alert("bbbbb: " +arrData);      
      var key = 'STORE_KEY'; 
      var r = document.getElementById('results');  
      localforage.setItem('cert1', 1234688, function(err, value) { 
       r.innerHTML += 'Saved: ' + value + '<br />'; 
      });  
      localforage.getItem('cert1', function(err, value) { 
       // console.log(value); 
       r.innerHTML += 'Read: ' + value + '<br />'; 
      });  
      localforage.keys(function(err, keys) { 
       r.innerHTML += 'keys: ' + keys + '<br /><br />'; 
      });    
      // Here. Why Uncaught TypeError: Cannot read property 'length' of undefined? 
      // How can I solved this problem. Help me. 
      alert(arrData.length); 
      alert("aad: " + arrData); 
      var text = ""; 
      for(var i=0;i<arrData.length;i++) 
       text += " " + arrData[i];  
      localforage.setItem(key, text, function(e) { 
       var tmp_func = function(err, readValue) { r.innerHTML += 'Read: ' + readValue + '< br />'; }; 
       r.innerHTML += 'Saved: ' + text + '<br />'; 
      });  
      alert("ccccc"); 
     };  
      function selectCert(sel){ 
       if(parent.middle.document.getElementById("test").innerHTML == "1") 
        parent.middle.document.getElementById("test").innerHTML = "2"; 
       else 
        parent.middle.document.getElementById("test").innerHTML = "1";  
       parent.middle.reload(); 
      } 
     </script> 
    </head> 
    <body> 
     <ul> 
      <div id="results"></div> 
      <input id="read-button" type="file" /> 
      <li id="qwer" onclick="selectCert(1)">1</li> 
      <li id="asdf" onclick="selectCert(2)">2</li> 
     </ul> 
    </body> 
</html> 

Это мой код HTML 5 и JavaScript. Он использует локальное хранилище, файл API и т. Д.Почему Uncaught TypeError: Не удается прочитать свойство 'length' undefined?

Почему этот код показывает мне следующую ошибку?

Uncaught Type Error: Cannot read property 'length' of undefined

+1

Что вы получаете в предупреждении для предупреждения (arrData); ? –

ответ

0

Два слова: variable scope.

Вы определили certArr в начале вашего файла с помощью

var certArr; 

... но вы фактически повторно объявить его в вашей функции, используя ключевое слово var снова:

var certArr = new Uint8Array(Oribuf); 

Чтобы получить доступ к заявленной во всем мире версии certArr, удалите ключевое слово var:

certArr = new Uint8Array(Oribuf); 
Смежные вопросы