Проблема с блокировкой AJAX с использованием JQuery - PullRequest
2 голосов
/ 24 июня 2009

Попробуй еще раз. Не думаю, что я четко сформулировал вопрос.

У меня большая проблема. Компания, с которой я заключаю контракт, попросила меня преобразовать сайт для отсрочки загрузки с использованием AJAX. Для этого я использую методы Page для загрузки элементов управления. Javascript выглядит так ... Работает как чемпион!

 $(document).ready(function() {

        var clientID = '#' + '<%= BackUpPower.DivBackUpPower.ClientID %>'

        if ($(clientID)) {

            $.ajax({
                type: "POST",
                url: "Dashboard.aspx/GetBackUpControl",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                timeout: 15000,
                success: function(result) {
                    $(clientID).css({ "display": "none" });
                    $(clientID).removeClass('loading');
                    $(clientID).attr('innerHTML', result.d);
                    $(clientID).fadeIn("slow");
                },
                error: function(xhr) {
                    //alert("GetBackUpControl failed");
                }
            });
        }

});

Код на стороне сервера выглядит следующим образом ...

[WebMethod]

public static String GetBackUpControl()
{

    Page page = new Page();
    UserControls_BackupPowerForm ctl = (UserControls_BackupPowerForm)page.LoadControl("~/UserControls/BackupPowerForm.ascx");
    ctl.ID = "BackupPower";
    page.Controls.Add(ctl);

    ctl.HostPage = "Dashboard";
    ctl.ActiveTimeRange = TimeRange.LastMonth;

    try
    {
        ctl.DataBindChart();
    }
    catch (Exception caught)
    {
        LoggingAdapter.LogError(caught.Message, "Error Generating Chart", caught);
        return String.Empty;
    }

    StringWriter writer = new StringWriter();
    HttpContext.Current.Server.Execute(page, writer, false);

    return writer.ToString();
}

Проблема у меня возникает, когда выполняется длительный обратный вызов, и пользователь пытается переключаться между страницами, нажимая гиперссылку, система долго ждет, прежде чем сделать это. Пошагово просматривая код, я вижу, что обратный вызов корректно прерывается при запросе новой страницы и вызывается обработчик ошибок JQuery, но все равно кажется, что запрос новой страницы ожидает завершения обратного вызова. Если обратный вызов не выполняется, запрос новой страницы происходит мгновенно. Кто-нибудь знает, что происходит?

1 Ответ

2 голосов
/ 26 июня 2009

Спасибо за помощь. Проблема была связана с тем, как asp.net сериализует запросы страниц, которые обращаются к сеансам, чтобы предотвратить конфликты обновлений. Установка сессий на «только чтение» в директиве страницы решает проблему. Однако, если страница записывает переменные сеансов, это будет проблемой. Обходной путь для этого состоит в том, чтобы создать перекрестную публикацию на другой странице, которая разрешает обновления сеанса.

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