jquery ajax只适用于IE

时间:2011-10-09 11:54:56

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

我有一个bilangual MVC 3应用程序。我使用下拉列表通过将下拉列表的值保存到cookie和会话中来更改语言。问题是当我发布它时,它只适用于IE。以下是我的代码。注意:该网站将被重新加载,当我关闭firefox或chrome并推迟它时,语言已被更改,但如果我不关闭FF或chrome,则不会发生任何事情。非常感谢您的帮助。 我使用$ .get,$ .post各种组合。

JavaScript代码:

$(function () {
    $('#languagesDiv select').change(function () {
        var myvalue = $(this).val();
        $.ajax({
            type: "POST",
            dataType: "xml",
            url: "/Language/SetLanguage",
            data: { code: myvalue },
            success: function (data) {
            },
            error: function (xhr, textStatus, errorThrown) {
            }
        });

        //             @*   $.post('@Url.Action("SetLanguage", "Language")', { code: $(this).val() },
        //                            function (result) {
        //                            }
        //                );*@

        var myDate = new Date();
        myDate.setDate(myDate.getDate() + 21);

        $.cookie('MyData', $(this).val(), { path: '/', expires: myDate });

        //window.location.reload();
        window.location.href = '/News/Index';
    });
}); 

C#代码:

//tested with and without [httppost]
public void SetLanguage(string code)
{
    if (Session["MyCulture"] != null && Convert.ToString(Session["MyCulture"]) != code ) 
    {
        Session["MyCulture"] = code;
        HttpCookie aCookie = Request.Cookies["MyData"]; // new HttpCookie("MyData");
        aCookie.Value = code;
        //HttpCookie aCookie = Request.Cookies["LangCookie"];
        aCookie.Expires = System.DateTime.Now.AddDays(21);
        Response.Cookies.Add(aCookie);
        //Response.AppendCookie(aCookie);
    }

    //return RedirectToAction("Index", "News");           
}

再次感谢你。

1 个答案:

答案 0 :(得分:3)

我看到的问题(后端可能有其他人)是您的AJAX请求可能无法在其他/更新的浏览器中完成。当你这样称呼时:

window.location.href = '/News/Index';

...你告诉浏览器离开,这意味着立即去那里,无论先前的AJAX请求是否已完成(浏览器可能会提前终止请求并继续前进)。

相反,您应该在请求完成后重定向并在success处理程序中重定向,如下所示:

$(function () {
  $('#languagesDiv select').change(function () {
    var myvalue = $(this).val();
    $.ajax({
      type: "POST",
      dataType: "xml",
      url: "/Language/SetLanguage",
      data: { code: myvalue },
      success: function (data) {
        var myDate = new Date();
        myDate.setDate(myDate.getDate() + 21);    
        $.cookie('MyData', $(this).val(), { path: '/', expires: myDate });

        window.location.href = '/News/Index';
      }
    });
  });
}); 

这样,只有在成功发出更改语言请求后,您才会告诉用户更改网页。