2011年9月16日 星期五

將SQL讀出的資料暫存到JavaScript的Array以方便利用

有時候網頁需要讀取列表資料的時候,

通常我會把 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 就是一個二維的陣列了。

然後,所有的操作就以這個陣列的資料為主,直到使用者重新讀取資料為止

0 個回應: