jquery ajax работает только в IE

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

Таким образом, вы сообщаете пользователю о смене страниц только после того, как вы успешно отправили запрос на изменение языка.