#jquery #ajax #asp.net-mvc-3 #cookies
#jquery #ajax #asp.net-mvc-3 #файлы cookie
Вопрос:
У меня есть двуязычное приложение 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 amp;amp; 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. Пожалуйста, правильно форматируйте свои вопросы.
Ответ №1:
Проблема, которую я вижу (могут быть и другие с серверной частью), заключается в том, что ваш запрос 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';
}
});
});
});
Таким образом, вы сообщаете пользователю о смене страниц только после того, как вы успешно отправили запрос на изменение языка.