使用 jQuery Ajax 在頁面滾動時從伺服器載入資料
簡介
文字將演示怎麼在滾動滾動條時從伺服器端下載資料。用AJAX技術從伺服器端載入資料有助於改善任何web應用的效能表現,因為在開啟頁面時,只有一屏的資料從伺服器端載入了,需要更多的資料時,可以隨著使用者滾動滾動條再從伺服器端載入。
背景
是Facebook促使我寫出了在滾動條滾動時再從伺服器載入資料的程式碼。瀏覽facebook時,我很驚訝的發現當我滾動頁面時,新的來自伺服器的資料開始插入到此現存的資料中。然後,對於用c#實現同樣的功能,我在網際網路上了查詢了相關資訊,但沒有發現任何關於用c#實現這一功能的文章或者部落格。當然,有一些Java和PHP實現的文章。我仔細的閱讀了這些文章後,開始用c#寫程式碼。由於我的C#版本執行的很成功,所以我想我願意分享它,因此我發表了這邊文章。
程式碼
只需要很少的幾行程式碼我們就能在滾動時完成載入。滾動頁面時,一個WebMethod將被客戶端呼叫,返回要插入客戶端的內容,同時,在客戶端,將把scroll事件繫結到一個客戶端函式(document.ready),這個函式實現從伺服器端載入資料。下面詳細說說這兩個伺服器端和客戶端方法。
伺服器端方法:這個方法用來從資料庫或者其他資料來源獲取資料,並根據資料要插入的控制元件的格式來生成HTML串。這裡我只是加入了一個帶有序列號的訊息。
[WebMethod] public static string GetDataFromServer() { string resp = string.Empty; for(int i = 0; i <= 10; i++) { resp += "<p><span>" + counter++ + "</span> This content is dynamically appended " + "to the existing content on scrolling.</p>" ; } return resp; }
若你要從資料庫載入資料,可以如下修改程式碼:
[WebMethod] public static string GetDataFromServer() { DataSet ds = new DataSet(); // Set value of connection string here string strConnectionString = ""; // Insert your connection string value here SqlConnection con = new SqlConnection(strConnectionString); // Write the select command value as first parameter SqlCommand command = new SqlCommand("SELECT * FROM Person", con); SqlDataAdapter adp = new SqlDataAdapter(command); int retVal = adp.Fill(ds); string resp = string.Empty; for (int i = 1; i <= ds.Tables[0].Rows.Count; i++) { string strComment = string.Empty; if (ds.Tables != null) { if (ds.Tables[0] != null) { if (ds.Tables[0].Rows.Count > 0) { if (ds.Tables[0].Rows.Count >= i - 1) { if (ds.Tables[0].Rows[i - 1][0] != DBNull.Value) { strComment = ds.Tables[0].Rows[i - 1][0].ToString(); } } } } } resp += "<p><span>" + counter++ + "</span> " + strComment + "</p>"; } return resp; }
客戶端方法:在客戶端,我使用了document.ready方法,並且把div的scroll事件繫結到了該方法上。我使用了兩個div元素,mainDiv和wrapperDiv,並且給mainDiv註冊了scroll事件,把動態資料插入到wrapperDiv中。
$(document).ready( function() { $contentLoadTriggered = false; $("#mainDiv").scroll( function() { if($("#mainDiv").scrollTop() >= ($("#wrapperDiv").height() - $("#mainDiv").height()) && $contentLoadTriggered == false) $contentLoadTriggered == false) { $contentLoadTriggered = true; $.ajax( { type: "POST", url: "LoadOnScroll.aspx/GetDataFromServer", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", async: true, cache: false, success: function (msg) { $("#wrapperDiv").append(msg.d); $contentLoadTriggered = false; }, error: function (x, e) { alert("The call to the server side failed. " + x.responseText); } } ); } } ); } );
這裡,為檢查滾動條是否已經移動到了底部,使用了下面的條件判斷,
if($("#mainDiv").scrollTop() >= ($("#wrapperDiv").height() - $("#mainDiv").height()) && $contentLoadTriggered == false)
這個條件將判斷滾動條是否已經到達了底部,當它已經移動到了底部,動態資料將從伺服器端載入,並且插入wrapperDiv。把資料插入目標div元素的客戶端指令碼將在非同步呼叫返回成功時執行。
success: function (msg) { $("#wrapperDiv").append(msg.d); $contentLoadTriggered = false; }
這裡,你將注意到只有在使用者移動滾動到了底部時,請求才會送到伺服器端。
我貼上了幾個樣圖:
Output
相關文章
- 利用JQuery的load函式動態載入頁面 以及jQuery動態載入頁面和請求所返回的資料jQuery函式
- angular 監聽 Windows 滾動事件 實現頁面滾動載入AngularWindows事件
- 關於用jquery.masonry.js實現動態載入效果(當頁面滾動條拉到底部時時重新載入圖片)jQueryJS
- jQuery 使用ajax,並重新整理頁面jQuery
- 頁面載入順序jQueryjQuery
- jQuery 頁面滾動 吸頂 和 吸底jQuery
- jquery的ajax的資料載入詳解jQuery
- ajax實現頁面非同步載入非同步
- 禁止頁面Body在後臺滾動
- 動態頁面資料載入不全的問題
- 從零開始學Web之jQuery(一)jQuery的概念,頁面載入事件WebjQuery事件
- 從頁面載入到資料請求,前端頁面效能優化實踐分享前端優化
- 分享一款jQuery全屏滾動頁面特性案例jQuery
- PHP+InfiniteScroll網頁無限滾動載入資料例項PHP網頁
- 使用伺服器端控制AJAX頁面快取伺服器快取
- Javascript在頁面載入時的執行順序JavaScript
- 從資料在頁面顯示不解析
- 啟動載入廣告頁面
- vue3 使用vant4中的List分頁載入時,會回滾到頁面頂部Vue
- js實現 web頁面的滾動條下拉時載入更多JSWeb
- 使用Web元件載入頁面Web元件
- ajax實現定時從伺服器獲取資料伺服器
- Laravel 自定義登入註冊頁面並使用 Ajax 進行資料傳輸Laravel
- 怎麼在ajax外邊使用ajax裡面在後端獲取的資料後端
- 頁面圖片自動滾動
- 動態載入頁面--小練
- 遮罩層禁止頁面滾動遮罩
- 禁止頁面滾動的方法
- 頁面滾動偵聽器
- 使用Echarts和Ajax動態載入資料進行大資料視覺化Echarts大資料視覺化
- fragment清除頁面資料(重新載入佈局)Fragment
- 拖動滾動條載入資料程式碼例項
- 20 個用於處理頁面滾動效果的 jQuery 外掛jQuery
- 【練習】將詳細頁面中的導航欄動態更改,根據電影型別在more-movie頁面中載入資料,上滑載入更多資料型別
- 使用jQuery和YQL,以Ajax方式載入外部內容jQuery
- 設計無限滾動下拉載入,實踐高效能頁面真諦
- 從輸入 URL 到頁面載入全過程
- jquery使用ajax讀取後臺資料在表格中顯示jQuery