2011-01-13 7 views
1

これは私の問題です:)。 私はコードの中に[WebMethods]をいくつか持っていて、jquery ajaxを使ってサーバーからデータを取得しています。 そしてそれは起こる:)。サーバーに要求を送信する必要があるボタンをクリックしようとすると、ページがアクティブでないうちに、半分の時間だけ何もしないで、イベントが発生し、サーバーから応答が返されます。以下のようなものページが一定期間アクティブでないときにクリックイベントが発生しない

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

ログインシステムはありますか?どのくらいの時間を過ぎた後に起こるのでしょうか?待ってから30分後に正しい結果が得られますか? –

+0

関数AddOrRemoveItemToCartでは、なぜdocument.readyにajax関数がラップされていますか? –

答えて

1

は、通常、私はあなたのセッションの有効期限が切れて言っただろう

私のjavascriptのは次のようになります。しかし、イベントは30分後に発生するので、それは別のものでなければなりません。

Firebugでデバッグし、AddOrRemoveItemToCartがすぐに呼び出されるかどうかを確認してください。ブラウザーとサーバー間のトラフィックも確認できます。

0

すぐにイベントが発生するはずですが、Remyさんからあなたのセッションの有効期限が切れている可能性があり、セッションオブジェクトを再確立してリクエストを処理するまでに時間がかかると言いました。

+0

セッションは、クライアント上のイベントを遅延させてはなりません。それは本当に遅延がどこにあるかによって異なります。 – Remy

関連する問題