將SQL讀出的資料暫存到JavaScript的Array以方便利用
有時候網頁需要讀取列表資料的時候,
通常我會把 SQL 執行語法交由另外一個 Coldfusion page 去執行,
然後取得回傳的內容並且儲存起來。
(這個方式當然是使用 ajax 方式,才不會動不動就要重新 RUN 一次版面)
為什麼要這麼做?
因為多數的時候,這個列表內容可能非常多(1~2千筆),
因此,這個列表就需要動用到分頁顯示,
然而,若是以前的作法是,每次點擊不同的分頁,就必須重新呼叫 SQL 查詢,
並只過濾出我需要顯示的範圍,而這種方式的處理,資料庫讀取就變得相當頻繁,
並且也會使得資料庫效能低落,當然也可以利用 Coldfusion 的 cache 保留,
只是這個保留的時間有時候就是很難拿捏,
所以我想:如果使用者讀取的列表一次到位,並保存在使用者端,
直到使用者重新操作查詢或是關閉頁面,都可以一直重複操作這些已經取得的資料,
這樣就方便多了。
利用陣列來儲存資料,就是一個不錯的法子。
上面的例子使用了 jQuery 的 ajax.responseText 方式取得資料,
QurySalesOrders.cfm 回傳的是 純文字資料 每列由 \r 相隔,每欄由 \t 相隔
(就是所謂的 Tab separated Text File 格式)
然後利用 split 去切割資料成陣列,並放到變數中,
最後的 dwset 就是一個二維的陣列了。
然後,所有的操作就以這個陣列的資料為主,直到使用者重新讀取資料為止
通常我會把 SQL 執行語法交由另外一個 Coldfusion page 去執行,
然後取得回傳的內容並且儲存起來。
(這個方式當然是使用 ajax 方式,才不會動不動就要重新 RUN 一次版面)
為什麼要這麼做?
因為多數的時候,這個列表內容可能非常多(1~2千筆),
因此,這個列表就需要動用到分頁顯示,
然而,若是以前的作法是,每次點擊不同的分頁,就必須重新呼叫 SQL 查詢,
並只過濾出我需要顯示的範圍,而這種方式的處理,資料庫讀取就變得相當頻繁,
並且也會使得資料庫效能低落,當然也可以利用 Coldfusion 的 cache 保留,
只是這個保留的時間有時候就是很難拿捏,
所以我想:如果使用者讀取的列表一次到位,並保存在使用者端,
直到使用者重新操作查詢或是關閉頁面,都可以一直重複操作這些已經取得的資料,
這樣就方便多了。
利用陣列來儲存資料,就是一個不錯的法子。
//下面這個變數要定義在外層,才能隨時取用
var dwset
//讀取資料
var rt=$.ajax({type:"GET",
url:"QurySalesOrders.cfm",
data:{qdate:'2010-5-6',sales:'Martin Lee'},
async:false
}).responseText;
//分割資料成陣列
dwset=new Array();
//拆資料列
var rows=rt.split("\r");
//拆資料欄
var cols;
for (i=0;i<rows.length;i++){
cols=rows[i].split("\t");
dwset[i]=cols;
};
上面的例子使用了 jQuery 的 ajax.responseText 方式取得資料,
QurySalesOrders.cfm 回傳的是 純文字資料 每列由 \r 相隔,每欄由 \t 相隔
(就是所謂的 Tab separated Text File 格式)
然後利用 split 去切割資料成陣列,並放到變數中,
最後的 dwset 就是一個二維的陣列了。
然後,所有的操作就以這個陣列的資料為主,直到使用者重新讀取資料為止
留言