2013-02-22 2 views
3

Я застрял со следующим, и я уверен, что это сделать, чтобы мое отсутствие опыта, касающегося обратных вызовов, я хочу, чтобы запросить БД следующим образом:Handling Javascript 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, которая дает мне сообщение errorCB «Ошибка обработки SQL: undefined».

Любые идеи по этому вопросу?

ответ

2

Ваш вопрос стек возврата:

Когда вы получите PrintData ваш стек вызовов выглядит следующим образом:

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

Javascript вернется вверх, что стек вызовов; поэтому, пока вы пропустили errorCB на своем пути вниз, по пути назад он попадает в эту функцию, независимо от того, что вы делаете; потому что это часть стека обратного вызова.

Что вы хотите сделать, так это не иметь errorCB в качестве функции обратного вызова.

Вместо этого зарегистрируйте свой displayAllFood() для действительного SQL. Если его действие продолжается, перейдите в список вызовов (это означает, что он продолжается до printData), но если его не действителен, тогда звоните errorCB.

+0

Спасибо! Решила! – galgo

+0

@Wigiri проблем нет. если это помогло бы отметить его как принятый ответ. – Ryan

Смежные вопросы