JQuery AJAX работает только работает в IE - PullRequest
0 голосов
/ 09 октября 2011

У меня есть двуязычное приложение 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 Ответ

3 голосов
/ 09 октября 2011

Проблема, которую я вижу (могут быть и другие с бэкэндом), заключается в том, что ваш запрос AJAX, вероятно, не будет выполнен в других / более новых браузерах.Когда вы вызываете это:

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

... вы говорите браузеру отойти, это означает, что он мгновенно отправляется туда, независимо от того, был ли завершен предыдущий запрос AJAX (браузер скорее всего прекратит выполнение запроса и продолжит работу.)

Вместо этого вы должны перенаправить после , когда запрос завершится, и выполнить перенаправление в обработчике success, например так:1011 *

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...