понедельник, июня 23, 2008

Эксплорер — бордель (ну, хорошо: о некоторых странностях кэширования запросов AJAX в IE)

Убил три часа на трудный глюк. AJAX-запрос, возвращающий одну-единственную цифирь, нормально работает в Огнелисе, а в Эксплорере возвращает ноль. Плюясь на отсутствие какой-нибудь вменяемой отладки под IE, по пять раз вычитал код (выловив несколько багов попутно :-)), покамлал так и сяк, в конце концов стал от безысходности имитировать в эксплорере этот запрос из адресной строки. Получил всё тот же чистый, красивый ноль на пустой странице. Чисто рефлекторно (эксплорер же — нельзя верить глазам своим) нажал F5... и увидел божественную семёрку. Млииииииин. Долбаный кэш. AJAX-запрос возвращает все необходимые заголовки, чтобы предотвратить кэширование, да. Но Эксплорер и не выполнял этот запрос! Так и показывал первоначальный ноль, игнорируя всё дальнейшее!

Решение очевидно, хотя не могу сказать, что я его не нагуглил :-) строка запроса никогда не должна повторяться, тогда Испорченный Браузер не станет его кэшировать. Добавление к запросу

&seed=<? echo uniqid(); ?>

всё полечило. Если б не PHP, можно было б воспользоваться яваскриптовским Math.random() или какой-нибудь функцией даты. Просто уже входит в привычку как можно меньше полагаться на браузер, особенно глючный.

Комментариев нет:

Поиск по этому блогу