2011-02-10 2 views
2
나는 데이터베이스를 열고 first.js 한

사용 : second.jsHTML5 웹 SQL 저장 다른 JS 파일

function prueba_funcion() { 
    DB.transaction(
     function (transaction) { 
      transaction.executeSql("SELECT * FROM categorias;", [], nullDataHandler, errorHandler); 
     } 
    ); 
} 
: 나는 다른 파일에서 SQL 문을 실행하기 위해 다음

$(function(){ 
    initDatabase(); 
}); 

function initDatabase() { 

    try { 
     if (!window.openDatabase) { 
      alert('Local Databases are not supported by your browser. Please use a Webkit browser for this demo'); 
     } else { 
      var shortName = 'MyDB'; 
      var version = '1.0'; 
      var displayName = 'First DB'; 
      var maxSize = 100000; // in bytes 
      DB = openDatabase(shortName, version, displayName, maxSize); 
      //dropTables(); 
      createTables(); 

     } 
    } catch(e) { 
     if (e == 2) { 
      // Version mismatch. 
      console.log("Invalid database version."); 
     } else { 
      console.log("Unknown error "+ e +"."); 
     } 
     return; 
    } 
} 

을 원하는을 내가 second.js 전에 first.js을 포함 내 HTML 코드에서 DB is not defined

:

나는이 오류가

,
<script type="text/javascript" src="js/first.js"></script> 
<script type="text/javascript" src="js/second.js"></script> 

그러나 나는 그것을 얻을 수 없다.

답변

1

문제는 가변 범위로 인해 발생합니다. 변수 DB을 범위에서 전역으로 만들려면 함수 외부에서 변수를 인스턴스화해야합니다. 맨 위 부분에 var DB = null; ~ first.js을 추가하기 만하면 문제가 해결 될 것입니다.

+0

답장을 보내 주셔서 감사합니다. 이제이 오류가 발생합니다 : null의 메서드 'transaction'을 호출 할 수 없습니다. – Mateo

+0

그러면 openDatabase가 반환하는 함수와 관련하여 다른 문제가있는 것 같습니다. Firebug를 사용하는 것처럼 보입니다 ... openDatabase, console.log (DB)를 호출하고 거기에서부터 시작하십시오. 이것은 일부 프레임 워크 또는 라이브러리의 일부 여야합니까? 그것은 바닐라 자바 ​​스크립트의 일부가 아닙니다. –

+2

@Mateo, 초기화하기 전에 데이터베이스를 호출하기 때문입니다. '$ (function() {initDatabase();});는 페이지가로드 될 때까지 기다립니다. 기다릴 필요가 없습니다. 그냥 initDatabase() first.js의 끝 부분에 넣어 – Felipe