ajax调用后无法在jquery中获取更新的cookie值

时间:2014-10-01 11:45:07

标签: jquery asp.net ajax asp.net-mvc cookies

我在mvc中制作了一个简单的购物车示例。 我点击Add to cart范围后,我正在做的是调用控制器操作方法。

然后使用购物车中的商品总数来更新Cookie值。但它给了我cookie的初始值。

这是我调用Controller Action的Ajax代码

   $(document).delegate('.addCart','click', function () {
            var getId = parseInt($(this).attr('id').slice(3));
            $.ajax({
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                url: '/Comments/CartDetailsSetGet',
                data: { Id: getId },
                success: function (data) {
                    var count = parseInt(data);
                    if (isNaN(count)){
                        alert(data);
                    }else{
                        var getCookies=  @HttpContext.Current.Request.Cookies["CartCookie"].Value;
                        $('.cartNum').html(getCookies);
                    }
                },
                error: function (data) {
                    alert("Error In Adding Item To Cart");
                }
            });
        });

span > with class cartNum我在其中显示购物车中的商品总数。

addCart是我点击添加购物车内商品的范围。

这是我的操作方法,这是我的默认操作

HttpCookie ck = new HttpCookie("CartCookie");
        public ActionResult Index()
        {
            if (Request.Cookies["CartCookie"] == null)
            {
                ck.Value = "0";
                Response.SetCookie(ck);
            }
            IList<Comment> commentList = db.Comments.ToList();
            return View(commentList);
        }

此操作在Ajax请求中被调用。

static List<int?> CartItemsId = new List<int?>();
        public string CartDetailsSetGet(int? Id)
        {
              if (CartItemsId.Contains(Id) != true)
                {
                    CartItemsId.Add(Id);
                    int getCount = CartItemsId.Count();
                    System.Web.HttpContext.Current.Request.Cookies["CartCookie"].Value = getCount.ToString();
                    ck.Expires = DateTime.Now.AddDays(-1);
                    var d = "";
                    if (System.Web.HttpContext.Current.Request.Cookies["CartCookie"] != null)
                    {
                        d = System.Web.HttpContext.Current.Request.Cookies["CartCookie"].Value;
                    }
                    return d.ToString();
                }
                else
                {
                    return "This Item Is Already In Cart";
                }            
        }

这里d我得到更新的cookie值,但是在Ajax Success中,这一行给出了初始值,即0。

var getCookies= @HttpContext.Current.Request.Cookies["CartCookie"].Value;

1 个答案:

答案 0 :(得分:2)

在您的脚本中,var getCookies = '@HttpContext.Current.Request.Cookies["CartCookie"].Value'是razor代码,在浏览器之前被解析为服务器端。如果您检查页面源,您将看到getCookies的值已设置为&#34; 0&#34;。

不是尝试设置或更新cookie,而是返回包含您要呈现的值的CartDetailsSetGet中的JSON数据,例如

public JsonResult CartDetailsSetGet(int? Id)
{
  if (CartItemsId.Contains(Id) != true)
  {
    ....
    int getCount = CartItemsId.Count();
    var data = new { count = getCount , message = "some message" };
    return Json(data, JsonRequestBehavior.AllowGet);
  }
  {
    var data = new { count = null, message = "This Item Is Already In Cart" };
    return Json(data, JsonRequestBehavior.AllowGet);
  }
}

脚本

$.ajax({
  ....
  success: function (data) {
    if (data.count) {
      $('.cartNum').html(data.count);
    } else {
      alert(data.message);
    }
  },
  ....