IE зависает в течение 5 минут при вызове синхронного xmlhttprequest

group by, вероятно, не подходящий инструмент для работы. Вместо этого вы можете использовать rank, чтобы найти верхнюю строку для каждой группы, и отфильтровать по ней:

SELECT date, id, qty
FROM   (SELECT date, id, qty, RANK() OVER (PARTITION BY id ORDER BY date DESC) AS rk
        FROM   mytable) t
WHERE  rk = 1
8
задан 5 March 2009 в 16:40
поделиться

4 ответа

Вы - правильный Jaap, это связано с ограничением соединения Internet Explorer 2. По некоторым причинам IE не выпускает соединения с запросами Ajax, выполненными в закрывших окнах.

У меня есть очень похожая ситуация, незначительно более простая:

  • Пользователь нажимает в Окне A для открытия Window B
  • Окно B выполняет вызов Ajax, который берет некоторое время
  • Перед возвратами вызова Ajax пользователь закрывает Окно B. Соединение с этим вызовом "утечки".
  • Повторитесь еще в 1 раз, пока оба доступных соединения не будут "пропущены"
  • Браузер становится безразличным

Одна техника, которую можно попробовать (упомянутый в статье Вы нашли), который, действительно кажется, работает, состоит в том, чтобы прервать запрос XmlHttp в разгрузить событии страницы.

Так что-то как:

var xhr = null;

function unloadPage() {
  if( xhr !== null ) {
    xhr.abort();
  }
}

Другая опция состоит в том, чтобы использовать синхронные вызовы Ajax, которые заблокируются до возвратов вызова, по существу блокируя браузер. Это может или не может быть приемлемо, учитывая Вашу конкретную ситуацию.

// the 3rd param is whether the call is asynchronous
xhr.open( 'get', 'url', false );

Наконец, как упомянуто в другом месте, можно скорректировать максимальное количество соединений использование IE в реестре. Ожидая, что посетители Вашего сайта сделают, это однако не реалистично, и он на самом деле не решит проблему - просто задерживают его от случая. Как заметка на полях, IE8 собирается позволить 6 параллельных соединений.

7
ответ дан 5 December 2019 в 12:13
поделиться

Спасибо за ответ на Martijn.

Это не решило мои проблемы. Я думаю, что я вижу, лучше всего описан на этом веб-сайте: http://bytes.com/groups/javascript/643080-ajax-crashes-ie-close-window

В моей ситуации у меня есть нестабильное соединение или медленный веб-сервер и когда соединение является слишком медленным, и браузер и веб-сервер все еще имеют соединение, затем замораживается.

2
ответ дан 5 December 2019 в 12:13
поделиться

Internet Explorer по умолчанию только позволяет два параллельных соединения тому же веб-сайту в целях загрузки. При попытке разжечь больше, чем это, Т.Е. остановы до одного из предыдущих концов запросов, в которой точке завершится следующий запрос. Я верю (хотя я мог быть неправым), это было помещено на месте для предотвращения перегружающихся веб-сайтов со многими параллельными загрузками за один раз. Существует взлом реестра для хитрости этой блокировки.

Я нашел эти инструкции, перебрасывающие Интернет, который облегчил мои проблемы - я не могу обещать, что он будет работать на Вашу ситуацию, но мультиограничение соединения, с которым Вы сталкиваетесь, кажется связанным:

  1. Нажмите на Кнопку запуска и выберите Выполнение.
  2. На Выполнении строка вводит Regedt32.exe и совершает нападки, Входят. Это запустит Редактор реестра
  3. Найдите следующий ключ в реестре: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
  4. Нажмите на интернет-ключ настроек.
  5. Теперь войдите в меню Edit, укажите на НОВЫЙ
  6. нажмите DWORD Value
  7. Тип MaxConnectionsPer1_0Server для названия этого Значения DWORD.
  8. Дважды щелкните по ключу MaxConnectionsPer1_0Server, который Вы просто создали, и введите следующую информацию: данные Значения: 10. Основа: Десятичное число.
  9. При окончании нажимают OK.
  10. Повторите шаги 4 - 9. На этот раз, называя ключевой MaxConnectionsPerServer и присваивая ему те же значения, как обозначено на Шагах 8.
  11. При окончании нажимают OK
  12. Закройте редактор реестра.

Конечно, я использовал бы их в сочетании с аварийным прекращением работы () вызов, ранее упомянутый. В тандеме они должны устранить проблему.

2
ответ дан 5 December 2019 в 12:13
поделиться

Ошибка Winsock 12002 означает следующее согласно MSDN

ERROR_INTERNET_TIMEOUT

12002

The request has timed out.

Winsock является базовым объектом передачи сокета для XMLHTTP в IE так любая ошибка, это не находится в диапазоне Ошибки HTTP (300,400,500 и т.д.), почти всегда winsock ошибка.

То, что не было ясно из Вашего вопроса, - запрашивается ли тот же ресурс в 2-й раз вокруг. Вы могли вызвать новый некэшируемый ресурс путем добавления:

'?uid=+'Math.random()

К URL, который мог бы решить проблему.

другое решение могло бы состоять в том, чтобы присоединить функцию к "onbeforeunload" событию на объекте окна для вызова аварийного прекращения работы () любым активным запросом XMLHTTP непосредственно перед тем, как окно B закрывается.

Надеюсь, что эти 2 указателя решают Вашу ошибку.

1
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: