#javascript #dom #google-chrome-extension
#javascript #dom #google-chrome-расширение
Вопрос:
Я работаю в расширении Chrome, я хочу сделать подкачку для таблицы, которая заполняется динамически с помощью запросов sqlite.
Я использую это руководство, чтобы выполнить подкачку и внести некоторые изменения в функцию инициализации
http://en.newinstance.it/2006/09/27/client-side-html-table-pagination-with-javascript/
Когда я хочу получить длину таблицы после ее заполнения, dom, похоже, не готов, и результат возвращается как НОЛЬ длины таблицы, вот часть моего кода..
function ViewAllNotes(db){
var allListItems;
var cur = fromDateToString(new Date(),"date");
db.transaction(function(tx) {
tx.executeSql("SELECT NOTE_DESC,NOTE_DATE,NOTE_TIME FROM NOTES where NOTE_DATE = ? order by NOTE_TIME desc ",[cur],function(tx,result){
alert(result.rows.length);
for(i=0;i< result.rows.length;i ){
tr= "<tr>";
tr=tr "<td>" result.rows.item(i)['NOTE_DESC'] "</td>";
tr=tr "<td>" result.rows.item(i)['NOTE_TIME'] "</td>";
tr=tr "</tr>";
allListItems =tr;
}
var tableContent= " <thead><tr><th id='activityHeader'>Activity</th> <th>Time</th></tr></thead>";
tableContent = tableContent "<tbody>" allListItems "</tbody>";
$("table#notes").append(tableContent);
//$('#notes').dataTable();
},onError);
});
}
Редактировать
В начале js-файла я делаю вот так
ViewAllNotes(db);
var rows = document.getElementById("notes").rows;
alert("rows " rows.length);
затем вызываете класс pager, но он также выдает нулевые предупреждения?
Ответ №1:
Вызовы SQL являются асинхронными. Ваш код, который проверяет длину, не будет иметь длины, доступной до завершения SQL и запуска обратного вызова.
Комментарии:
1. пожалуйста, проверьте вопрос еще раз, я отредактирую его после вашего ответа.
2. Первая строка вызова ViewAllNotes является асинхронной. Рассматривайте это как вызов ajax. Все, что следует, не будет иметь доступа к этому состоянию до его завершения. Нет никаких гарантий, когда это завершится — это зависит от браузера, запроса к БД и т.д. Лучше всего использовать шаблон promise, модель с одним участником, события или pub / sub (observer), чтобы сообщить оставшемуся коду, когда SQL будет завершен.
3. @Alaa правильный способ сделать это — передать в это функцию обратного вызова
ViewAllNotes
, а затем ваша функция вызывает ее.