2011-01-13 19 views
1

好的,這是我的問題:)。 我有兩個[WebMethods]在我的代碼背後,並使用jQuery的Ajax從服務器獲取數據。 然後它發生:)。經過一段時間,雖然頁面處於非活動狀態,但當我嘗試單擊應該向服務器發送請求的按鈕時,它只是在大約半分鐘內沒有任何操作,只有這樣纔會觸發事件並從服務器獲取響應。頁面處於非活動狀態一段時間後點擊事件不會觸發

我的JavaScript看起來是這樣的:

addToCart.click(function() { 

AddOrRemoveItemToCart($(this)); 

}); 

function AddOrRemoveItemToCart(control) 
{ 
var itemId = contol.attr("id"); 
$('document').ready(function() { 
     $.ajax({ 
      type: "POST", 
      url: "Home.aspx/AddOrRemoveItemToCart", 
      data: "{itemId:" + itemId + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       if (data.d.length > 0) { 
        SucessAddItemToCart(data.d); 
       } 
      }, 
      error: function (textStatus) { 
       alert(textStatus); 
      } 
     }); 
    }); 
} 

function SucessAddItemToCart(data) 
{ 
//DO SOMETHING WITH DATA 
} 

而我的服務器端代碼看起來是這樣的:

[WebMethod] 
public static List<CartItem> AddOrRemoveItemToCart(string itemId) 
{ 
List<CartItem> items = new List<CartItem>(); 
List<CartItem>temp = new List<CartItem>(); 
bool check = false; 
if(HttpContext.Current.Session["items"]!=null) 
{ 
items = (List<CartItem>)HttpContext.Current.Session["items"]; 
foreach(CartItem c in items) 
{ 
if(c.Id != itemId) 
temp.Add(c); 

else 
check = true; 
} 
if(!check) 
temp.Add(new CartItem{Id = itemId}); 
} 
HttpContext.Current.Session["items"]=temp; 
return temp; 
} 
+0

您有登入系統嗎?多少時間後,它會發生?在等待半分鐘後你會得到正確的結果嗎? – 2011-01-13 14:40:12

+0

在函數AddOrRemoveItemToCart中,爲什麼ajax函數包裝在document.ready中? – 2011-01-13 14:41:32

回答

1

通常我會說你的會話過期。但是由於事件在半分鐘之後就會發生,所以它必須是別的東西。

嘗試使用Firebug進行調試,並檢查AddOrRemoveItemToCart是否立即被調用。您還可以看到瀏覽器和服務器之間的流量。

0

您的事件應該立即啓動,但是由於Remy說您的會話可能已過期,並且需要一些時間來重新建立會話對象並處理請求。

相關問題