日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
基于JSON實(shí)現(xiàn)數(shù)據(jù)列表翻頁顯示

【獨(dú)家特稿】在Web開發(fā)過程中,我們常常要實(shí)現(xiàn)大量同結(jié)構(gòu)數(shù)據(jù)在網(wǎng)頁上的列項(xiàng)/列表顯示,相當(dāng)多的時(shí)間都花在數(shù)據(jù)顯示的處理上。而數(shù)據(jù)列表顯示過程中的翻頁功能,則是Web開發(fā)中非常常用的功能,有多種實(shí)現(xiàn)方法。

為渭濱等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及渭濱網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、渭濱網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

由于涉及到顯示頁面的數(shù)據(jù)更新問題,因此,多數(shù)實(shí)現(xiàn)方法往往用到前后臺交互功能,利用后臺邏輯控制功能來提供支持,完成前臺數(shù)據(jù)顯示的翻頁功能。這樣的處理方式,的確可以解決很多情況下的實(shí)際問題,然而代價(jià)是增加了前后臺交互的次數(shù),每一次翻頁都要請求后臺邏輯控制程序和后臺數(shù)據(jù)庫,也增加了用戶等待時(shí)間。

本文要介紹的是一種采用純前臺方案,可以實(shí)現(xiàn)數(shù)據(jù)列表顯示過程的翻頁功能,其特點(diǎn)是以JSON, jQuery和Trimpath來實(shí)現(xiàn)前臺數(shù)據(jù)的列表顯示與翻頁控制,整個過程中不依賴后臺,不需要用到任何JSP, PHP, ASP或其他動態(tài)網(wǎng)頁代碼,屬于純前臺程序,在使用時(shí),為用戶提供了很大的靈活性。

具體實(shí)現(xiàn)過程包括如下步驟:

1、將需要列表翻頁顯示的數(shù)據(jù)處理為JSON的格式,如代碼 1所示。為簡易起見,這里僅列出九條數(shù)據(jù),實(shí)際上可以有更多條數(shù)據(jù)包含于JSON文件中,通過AJAX方式從后臺請求得到存有數(shù)據(jù)的JSON對象,或者也可以直接采用前臺jQuery加載JSON文件的方式得到。(相關(guān)文章推薦:理解jQuery解析JSON數(shù)據(jù)對象原理)

 
 
 
 
  1. 代碼 1:  
  2. list.json  
  3.  
  4. {  
  5.     "todo": [  
  6.         {  
  7.             "task": "Go to US",  
  8.             "time": "2010-09-05",  
  9.             "location": "PA"  
  10.         },  
  11.         {  
  12.             "task": "Come back China",  
  13.             "time": "2010-09-15",  
  14.             "location": "Beijing"   
  15.         },  
  16.         {  
  17.             "task": "Go to lab",  
  18.             "time": "2010-09-20",  
  19.             "location": "Wuhan"   
  20.         },  
  21.         {  
  22.             "task": "Go to Shopping",  
  23.             "time": "2010-09-25",  
  24.             "location": "Wuhan"  
  25.         },  
  26.         {  
  27.             "task": "Attend conference",  
  28.             "time": "2010-09-30",  
  29.             "location": "Beijing"  
  30.         },  
  31.         {  
  32.             "task": "View TV",  
  33.             "time": "2010-10-01",  
  34.             "location": "Wuhan"  
  35.         },  
  36.         {  
  37.             "task": "View SAKAI",  
  38.             "time": "2010-10-02",  
  39.           "location": "Wuhan"  
  40.         },  
  41.         {  
  42.             "task": "View Movie",  
  43.             "time": "2010-10-01",  
  44.             "location": "Wuhan"  
  45.         },  
  46.         {  
  47.             "task": "Review papers",  
  48.             "time": "2010-10-03",  
  49.             "location": "Wuhan"  
  50.         }  
  51.     ]  

#p#

2、編寫前臺顯示代碼,采用Trimpath模板編寫列表數(shù)據(jù)的模板化顯示部分,如代碼 2所示。在這里,采用Trimpath模板來編寫表格體(tbody)中的內(nèi)容,采用名為list_container的div作為目標(biāo)顯示容器。

 
 
 
 
  1. 代碼 2:  
  2. list.html  
  3.  
  4.  
  5.  
  6.    
  7.     
  8.    List 
  9.      
  10.      
  11.      
  12.    
  13.  
  14.    
  15.     

    The List Page

     
  16.      
  17.       Items per Page:   
  18.        
  19.        
  20.     
 
  •      
  •        
  •         
  •  
  •           
  •  
  •             Task 
  •             Time 
  •             Location 
  •           
  •  
  •         
  •  
  •         
  •  
  •         {for item in todo}  
  •           
  •  
  •             
  •  
  •             
  •  
  •             
  •  
  •           
  •  
  •         {/for}  
  •           
  •  
  •              
  •               previous 
  •                
  •               next 
  •              
  •           
  •  
  •         
  •  
  •       
  • ${item.task} ${item.time} ${item.location}
     
  •     
  •     
  •  
  •    
  •  
  •  
  •  
  • 3、采用CSS樣式,對顯示頁面予以修飾,如代碼 3所示。

     
     
     
     
    1. 代碼 3:  
    2. list.css  
    3. form {margin: 10px 0;}  
    4. table {border-width: 1px; border-style: solid; width: 600px;}  
    5. td {border-width: 1px; border-style: solid; padding: 3px 5px;}  
    6. thead {font-weight: bold; background-color: #F0F0F0;}  
    7.  
    8. #list_input_pagesize_container {margin: 10px 0;}  
    9. #list_input_pagesize {width: 50px;}  
    10. #list_next {float: right;}  
    11. #list_previous {float: left;}  
    12. #list_td_foot {text-align: center;}  
    13. #list_td_task {width: 50%}  
    14. #list_td_time {width: 20%}  
    15. #list_td_location {width: 30%} 

    #p#

    4、采用jQuery來控制前臺翻頁顯示(如代碼 4所示),這是本方法的關(guān)鍵。需要用到j(luò)Query的JSON處理功能和Trimpath模板加載功能,該方法的主要思路是:將所需顯示的包含全部目標(biāo)數(shù)據(jù)的JSON對象拆分成多個JSON對象,集中存入一個數(shù)組,數(shù)組中每個JSON對象對應(yīng)包含一個頁面需要顯示的內(nèi)容,然后根據(jù)用戶對頁碼的選擇,將與頁碼對應(yīng)的那個JSON對象送到Trimpath模板加載,在頁面上顯示出來。

    當(dāng)用戶在頁面上點(diǎn)擊“前一頁”、“后一頁”鏈接進(jìn)行翻頁控制的時(shí)候,就更換要加載的JSON數(shù)據(jù)對象,這樣就可以在不刷新頁面的情況下實(shí)現(xiàn)快速的翻頁響應(yīng),由于是純前臺控制,不需請求后臺,***的時(shí)間消耗只是重新加載一遍前臺模板,因此速度很快。

    該程序中采用了三個對象,分別是:

    1)json: 類型為JSON對象,功能是用來存儲初始獲得的JSON對象,其中包含所有需要顯示的數(shù)據(jù);

    2)data: 類型是數(shù)組,功能是用來存儲經(jīng)過了拆分處理的每一頁需要顯示的JSON對象的集合,如前所述;

    3)info: 類型是JSON對象,功能是用來存儲翻頁顯示過程中的控制信息(如:currentPageNo, pageSize等)。

    另外,該程序還提供了頁面尺寸修改的功能,可以供用戶修改每一頁顯示的數(shù)據(jù)項(xiàng)數(shù)。

     
     
     
     
    1. 代碼 4:  
    2. list.js  
    3. var pageShow = function() {  
    4.   var json = {}; // The original json object  
    5.   var data = []; // The array of all page list, includes each page items  
    6.   var info = {}; // The json object to save page information  
    7.  
    8.   var getPageSize = function() {return info.pageSize;};  
    9.   var setPageSize = function(pageSize) {info.pageSize = pageSize;};  
    10.   var getItemNumber = function() {return info.itemNumber;};  
    11.   var setItemNumber = function(itemNumber) {info.itemNumber = itemNumber;};  
    12.   var getPageNumber = function() {return info.pageNumber;};  
    13.   var setPageNumber = function(pageNumber) {info.pageNumber = pageNumber;};  
    14.   var getCurrentPageNo = function() {return info.currentPageNo;};  
    15.   var setCurrentPageNo = function(currentPageNo) {info.currentPageNo = currentPageNo;};  
    16.  
    17.  var loadTemplate = function(json) {  
    18.     $("#list_container").hide();  
    19.     $("#list_container").html(TrimPath.processDOMTemplate("list_template", json));  
    20.     $("#list_container").show();  
    21.   };  
    22.  
    23.   var showPageNo = function() {  
    24.     $("#list_pageno").text(getCurrentPageNo() + "/" + getPageNumber());  
    25.   };  
    26.  
    27.   var showPreviousPage = function() {  
    28.     var currentPageNo = getCurrentPageNo();  
    29.     var pageNumber = getPageNumber();  
    30.     if (currentPageNo != 1) {  
    31.       currentPageNo--;  
    32.       setCurrentPageNo(currentPageNo);  
    33.       loadTemplate(data[currentPageNo - 1]);  
    34.       showPageNo();  
    35.     }  
    36.   };  
    37.  
    38.   var showNextPage = function() {  
    39.     var currentPageNo = getCurrentPageNo();  
    40.     var pageNumber = getPageNumber();  
    41.     if (currentPageNo != pageNumber) {  
    42.       currentPageNo++;  
    43.       setCurrentPageNo(currentPageNo);  
    44.       loadTemplate(data[currentPageNo - 1]);  
    45.       showPageNo();  
    46.     }  
    47.   };  
    48.  
    49.   var showData = function() {  
    50.     var pageSize = getPageSize();  
    51.     setPageSize(pageSize);  
    52.  
    53.     var itemNumber = json.todo.length;  
    54.     setItemNumber(itemNumber);  
    55.  
    56.     var pageNumber = 0;  
    57.     if (itemNumber % pageSize == 0) {  
    58.       var pageNumber = itemNumber / pageSize;  
    59.     }  
    60.     else {  
    61.       pageNumber = Math.floor(itemNumber / pageSize) + 1;  
    62.     }  
    63.     setPageNumber(pageNumber);  
    64.  
    65.     var currentPageNo = 1;  
    66.     setCurrentPageNo(currentPageNo);  
    67.  
    68.     // Validate if there is only one page  
    69.     if (pageNumber == 1) {  
    70.       loadTemplate(json);  
    71.       showPageNo();  
    72.     }  
    73.     else {  
    74.       for (var i = 0, j=0; i < itemNumber; i++) {  
    75.         if (!data[j]) {  
    76.           data[j] = $.parseJSON('{"todo": []}');  
    77.         }  
    78.         data[j].todo[i] = json.todo[i];  
    79.         if (i % getPageSize() == getPageSize() - 1) {  
    80.           j++;  
    81.         }  
    82.       }  
    83.  
    84.       loadTemplate(data[getCurrentPageNo() - 1]);  
    85.  
    86.  showPageNo();  
    87.     }  
    88.   };  
    89.  
    90.   var getData = function(path) {  
    91.     $.getJSON(path, function(data) {  
    92.       json = data;  
    93.       showData();  
    94.     });  
    95.   };  
    96.  
    97.   var initPageShow = function() {  
    98.     setPageSize(5);  
    99.     $("#list_input_pagesize").val(getPageSize());  
    100.     var path = "/list/data/list.json";  
    101.     getData(path);  
    102.  
    103.     $("#list_button_pagesize").bind("click", function() {  
    104.       var newPageSize = parseInt($("#list_input_pagesize").val());  
    105.       setPageSize(newPageSize);  
    106.       data = [];  
    107.       showData();  
    108.       $("#list_input_pagesize").focus();  
    109.       return false;  
    110.     });  
    111.     $("#list_previous").live("click", function() {  
    112.       showPreviousPage();  
    113.       return false;  
    114.     });  
    115.     $("#list_next").live("click", function(e) {  
    116.       showNextPage();  
    117.       return false;  
    118.     });  
    119.     $("#list_input_pagesize").focus();  
    120.   };  
    121.  
    122.   initPageShow();  
    123. }  
    124.  
    125. var init = function() {  
    126.   pageShow();  
    127. }  
    128.  
    129. init(); 

    #p#

    5、程序中所有文件的存儲結(jié)構(gòu)如圖1所示。

     
    圖1

    6、程序運(yùn)行結(jié)果如圖2所示。

     
    圖2

    綜上所述,本文所介紹的翻頁顯示控制方法避免了前后臺交互的問題,使前臺程序可以獨(dú)立運(yùn)轉(zhuǎn),獨(dú)立控制翻頁,而無需依賴后臺支持,使用過程較為靈活,用戶響應(yīng)時(shí)間很短,無需刷新頁面和請求后臺數(shù)據(jù),具有很高的效率。在使用過程中,可以將其中的翻頁函數(shù)以jQuery函數(shù)調(diào)用方式予以應(yīng)用。

    【本文是原創(chuàng)稿件,轉(zhuǎn)載請務(wù)必標(biāo)明出處和作者】


    分享名稱:基于JSON實(shí)現(xiàn)數(shù)據(jù)列表翻頁顯示
    本文路徑:http://www.5511xx.com/article/ccisiic.html