Подкачка в java script

#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 , а затем ваша функция вызывает ее.