Ajax долго не работает правильно - PullRequest
4 голосов
/ 26 мая 2011

Я занимаюсь разработкой простого чата с незнакомцами, используя длинный опрос в MVC 2. Он отлично работает на моей машине для разработки, если я открываю приложение в разных браузерах ... Я имею в виду, если я загрузил приложение в IE и Mozilla, оно работает нормально

если я взял заявку на двух вкладках браузера (например, IE), длинный опрос не запускается с обеих вкладок ... Я имею в виду, есть кнопка запуска, чтобы начать чат, который запускает длинный опрос.Я вижу, что это вызывает действия во время отладки. И моя проблема в том, что, когда я нажал кнопку запуска на вкладке 1, он запускает ajax-запрос (длинный опрос (это требование ожидания на сервере, пока не придет другой запрос)). Затем я нажимаю кнопкуКнопка «Пуск» на вкладке 2, она не запускает ajax-запрос до тех пор, пока первый запрос не будет возвращен с сервера (после истечения времени ожидания).

Почему это происходит?Я читаю, как браузер заблокирует несколько запросов AJAX. Это причина для этого?..Это нормально работает, если я использую разные браузеры. Проблема возникла, только если я взял две вкладки в одном браузере

1 Ответ

6 голосов
/ 27 мая 2011

Я читаю, как браузер заблокирует несколько запросов AJAX.

Да, если вы используете сеансы, ASP.NET блокирует параллельные запросы из одного сеанса. Цитата из документации :

Доступ к состоянию сеанса ASP.NET эксклюзив за сеанс, что означает что если два разных пользователя делают одновременные запросы, доступ к каждому отдельная сессия предоставляется одновременно. Однако, если два параллельные запросы сделаны для тот же сеанс (используя тот же Значение SessionID), первый запрос получает эксклюзивный доступ к сеансу Информация. Второй запрос выполняется только после первого запроса закончен. (Второй сеанс может также получить доступ, если эксклюзивный замок на информацию освобождается, потому что первый запрос превышает блокировку тайм-аут.) Если EnableSessionState значение в директиве @ Page установлено ReadOnly, запрос на информация о сеансе только для чтения не привести к эксклюзивной блокировке на данные сеанса. Тем не менее, только для чтения запросы на данные сеанса могут все еще придется ждать блокировки, установленной запрос на чтение и запись данных сеанса в ясно.

Также убедитесь, что вы отключили кэширование. Например, если вы используете jquery, используйте опцию cache: false при опросе:

$.ajax({
    url: '/poll',
    cache: false,
    success: function(result) {
        // ...
    }
});
...