2013-03-06 64 views
0

我嘗試在向下滾動到底部時將新項目加載到電子商務網站。我做了它的大部分,但它獲得相同的數據加載......我傳遞一個計數器(通過會話)來選擇新的行,但它不起作用。asp.net jquery向下滾動時動態加載數據

這裏是jQuery代碼...

function sendData() { 
<% Session["count_of_rows_displayed"] = Convert.ToInt16(Session["count_of_rows_displayed"].ToString()) + 1; %> 
alert('<%= Session["count_of_rows_displayed"].ToString() %>'); 
$.ajax(
    { 
     type: "POST", 
     url: "insaat.aspx/GetData", 
     data: "{'number_of_rows':'" + <%= Session["count_of_rows_displayed"].ToString() %> +"'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: "true", 
     cache: "false", 

     success: function (msg) { 
      $("#myDiv").append(msg.d); 
     }, 

     Error: function (x, e) { 
      alert("Some error"); 
     } 
    }); 
} 

這裏是將WebMethod

[WebMethod] 
public static string GetData(String number_of_rows) 
{ 
int no = Convert.ToInt16(number_of_rows); 
string resp = string.Empty; 
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
SqlDataAdapter adapter = new SqlDataAdapter(); 
DataSet ds = new DataSet(); 
int i = 0; 
connection.Open(); 
adapter.SelectCommand = new SqlCommand("SELECT TOP " + (no*6) + " * FROM (SELECT TOP " + ((++no) * 6) + " * FROM Product ORDER BY id ASC) t ORDER BY id DESC", connection); 
adapter.Fill(ds); 
connection.Close(); 

for (i = 0; i <= ds.Tables[0].Rows.Count - 1 && i < 24; i++) 
    // build the data 

connection.Close(); 
return resp; 
} 

我試圖增加會話,並與jQuery傳遞。但它不增加會話。我怎樣才能讓會話增加?

+0

這或許可以幫助你... http://www.aspsnippets.com/Articles/Load-data-while-Scrolling-Page-down-with-jQuery-AJAX-and- ASPNet.aspx – Arbaaz 2013-03-06 19:11:18

回答

0

此行不爲AJAX Web方法每次連續調用而變化:

data: "{'number_of_rows':'" + <%= Session["count_of_rows_displayed"].ToString() %> +"'}", 

該行被渲染到頁面一次有任何值是Session["count_of_rows_displayed"]在那個時候。所以每次AJAX調用觸發時,它都會使用與number_of_rows相同的原始值。

由於您在Session對象中跟蹤此服務器端,因此您可能無需傳遞來自客戶端的值。只需參考Session["count_of_rows_displayed"]並直接在服務器端Web方法中增加其值。

事情是這樣的:

public static string GetData() 
{ 
    string number_of_rows = Session["count_of_rows_displayed"]; 
    int no = Convert.ToInt16(number_of_rows); 
    Session["count_of_rows_displayed"] = no + 1; 

    // the rest of the method 
} 

更新:你說,Web方法不能訪問Session?那麼,我想我沒有遇到過,因爲我沒有發現需要WebMethod,我宗教上試圖避免使用Session :)

在這種情況下,這可能是更好的方法總體上,你仍然可以每次使用您希望的RESTful方法將值傳遞給Web方法。但是,您還需要在客戶端增加增量值

您所犯的原始錯誤是認爲代碼將重新渲染多次引用Session的那一行。因此,不要依賴Session來存儲此值,您應該將其呈現爲JavaScript值,然後再以此值操作。事情是這樣的:

var rowCount = <%= Convert.ToInt16(Session["count_of_rows_displayed"].ToString() %>; 

function sendData() { 
    $.ajax({ 
     type: "POST", 
     url: "insaat.aspx/GetData", 
     data: {'number_of_rows': rowCount }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: "true", 
     cache: "false", 

     success: function (msg) { 
      $("#myDiv").append(msg.d); 
      rowCount++; 
     }, 

     Error: function (x, e) { 
      alert("Some error"); 
     } 
    }); 
} 
+0

但由於getdata()是web方法,因此無法訪問Session。這就是爲什麼我試圖做一些事情...... – 2013-03-06 19:04:06

+0

它不能?吉茲。那麼,我有一個想法。我會用它更新答案。敬請期待... – David 2013-03-06 19:05:28

+0

我正在嘗試使用隱藏字段 – 2013-03-06 19:07:10