2011-10-09 67 views
0

我有一個bilangual MVC 3應用程序。我使用下拉列表通過將下拉列表的值保存到cookie和會話中來更改語言。問題是當我釋放它時,它只能在IE中使用。以下是我的代碼。注意:該網站將被重新加載,當我關閉Firefox或鉻並重新啓動它時,語言已被更改,但沒有發生,如果我不關閉FF或鉻。非常感謝您的幫助。 我已經使用$ .get,$ .post每種組合。jquery ajax作品只適用於IE

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");   
} 

再次感謝您。

+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'; 
     } 
    }); 
    }); 
}); 

這樣,你只告訴用戶之後對其進行更改網頁已成功提出了更改語言的請求。

+0

非常感謝。 – user217648

相關問題