2013-02-22 1 views
3

나는 다음과 붙어있어 나는 그것을, 나는 다음과 같이 DB를 조회 할 콜백 처리 경험이 내 부족 할 확신합니다 :취급 자바 스크립트 db.transaction 콜백

db.transaction(queryFoodDBAll, errorCB); 

function errorCB(tx, err) { 
    alert("Error processing SQL: "+err); 
} 

function queryFoodDBAll(tx) { 
    tx.executeSql('SELECT * FROM Food', [], displayAllFood, errorCB); 
} 

function displayAllFood(tx, results) { 
    var len = results.rows.length; 
    var items = new Array(); 
    for (var i=0; i<len; i++){ 
     items[i] = results.rows.item(i).data 
    } 
    printdata('settings-food',items, 'Food'); 
} 

function printData(type,data,title) { 
    switch(type) 
    { 
     case 'settings-food': 
      alert("Data: "+data); 
      var content = '<div data-role="collapsible" data-theme="c"><h3>'+title+'</h3>'; 
      for (var i=0;i<data.length;i++) { 
       content += '<p>'+data[i]+'</p>'; 
      } 
      content += '</div>'; 
      $("#settings-food").append(content); 
      break; 
} 

을 지금, 실행하면 printData 함수를 실행할 때까지 모든 정보가 성공적으로 검색되어 "error processing SQL : undefined"라는 errorCB가 표시됩니다.

이것에 대한 아이디어가 있습니까? 당신이 당신의 호출 스택은 다음과 같습니다 printData에 도착

:

답변

2

귀하의 문제는 리턴 스택입니다

----queryFoodDAll 
----executeSQL 
----disiplayAllFood (jump to printData) 
----errorCB 
----printData 

자바 스크립트가 호출 스택을 반환합니다; 그래서 당신이 도중에 errorCB을 건너 뛰는 동안, 당신이 무슨 일을하던간에 그것은 그 기능을 쳤습니다. 콜백 스택의 일부이기 때문입니다.

당신이하고 싶은 것은 귀하의 errorCB 콜백 기능이 없습니다.

displayAllFood()에 올바른 SQL이 있는지 확인하십시오. 다이얼로그의 유효 기간이 계속 통화 목록 (계속 printData)으로 이어지지 만 이 유효하지 않은 경우이 아닌 경우 errorCB으로 전화하십시오.

+0

고맙습니다! 그것을 해결! – galgo

+0

@Wigiri 문제 없습니다. 이것이 허용 된 대답으로 표시하는 데 도움이된다면. – Ryan