2011-11-10 78 views
0

我正在使用chrome擴展,我想爲使用sqlite查詢動態填充的表進行分頁。在java腳本中尋呼

我使用本教程進行分頁,並在初始化函數一些修改

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文件的開頭我做樣T他的

ViewAllNotes(db); 
var rows = document.getElementById("notes").rows; 
alert("rows "+rows.length); 

然後調用尋呼機類,,但它也提醒零?

回答

2

SQL調用是異步的。在SQL完成並觸發回調之前,測試長度的代碼將不具有可用的長度。

+0

請再次檢查問題,我在你的答案後編輯它。 – palAlaa

+0

ViewAllNotes調用的第一行是異步的。把它當作ajax電話。以下任何情況在完成之前都無法訪問該狀態。當它完成時沒有guaruntees - 它取決於瀏覽器,db查詢等。最好的選擇是使用承諾模式,單演員模型,事件或pub/sub(觀察者)來告訴剩餘的代碼當SQL完成時。 – AutoSponge

+1

@Alaa一個正確的方法是將一個回調函數傳遞給那個'ViewAllNotes',然後你的函數調用它。 –