by Blush
22. June 2010 09:47
Эдак с месяц назад, наш отдел разработки постигла тяжелая утрата - сайт перестал работать в Google Chrome!
Сайт у нас, надо сказать, считай целиком на ajax выполненном через jQuery, а оный аякс внезапно перестал работать.
Анализ правок внесенных сотрудниками и откат к версии месяячной давности ничего не дали.
За то результаты дал откат на предыдущую версию хрома.
На этом мы и успокоились, списав все на глюк браузера в виду жуткой загруженности работой и уведомив об этом пользователей.
Однако время шло, а сайт в хроме все не спешил работать, у нас выдалось некоторое время для оптимизации и сегодня я занялся этим вопросом.
Гугль информации нужной не дал и пришлось действовать самостоятельно.
На клиенте response возвращал пустую строку, а readyState = 1.
После продолжительных извращений проблема была найдена:
Так повелось прежними поколениями наших разработчиков, что большинство ajax запросов у нас обрабатывается aspx страницами и для предотвращения выдачи по ajax запросу ненужного html контента, использовалось Response.Close()
Который "Закрывает соединение с клиентом по данному сокету.", как говорит MSDN.
А не Response.End(), который "Отправляет клиенту все выходные данные, находящиеся в данный момент в буфере, прекращает обработку страницы и создает событие EndRequest" и должен бы использоваться по идее.
Вот и все, банальная замена решила данную проблему.
Как то обидно, что причиной продолжительных проблем, явилось банальное следование документации, одним из браузеров и невнимательность наших предшественников к описаниям функций.