У меня странная ошибка, связанная с PHP, Ajax и IE.
Способ, которым настроен мой сайт, заключается в том, что корневая страница будет динамически загружать контент через jQuery $.ajax
на основе хеш-тега URL.Так что http://example.com/#message/
загрузит страницу для отправки сообщения.Стандартные вещи.
При отправке этой формы сообщения я добавляю хеш-тег к запросу POST, чтобы я мог отправить пользователя обратно на страницу, откуда он пришел.В этом примере обмена сообщениями я получу $_POST['page'] = "message/"
на стороне сервера.Пока отлично работает.
Я обработаю запрос и отправлю пользователя обратно на страницу.Вот здесь и начинается проблема.
То, что я делаю в своем скрипте PHP:
$_SESSION['sent'] = true;
header('Location: '. rootUrl() .'/#'. $_POST['page']);`
(rootUrl()
возвращает «http://example.com
» в этом случае, поэтому строкаприсоединяется к "http://example.com/#message/
")
Это возвращает меня на ту же страницу сообщений, на которой ранее находился пользователь, и сценарий выглядит примерно так:
if (isset($_SESSION['sent'])) {
echo '<p>Your message was sent!</p>';
} else {
// show the message submit form here
}
// fully clear so the user can reload the page and send another message
unset($_SESSION['sent']);
Теперь весь этот сценарийотлично работает во всех браузерах, кроме IE, а отлично работает во всех браузерах на не-ajax-версии (функциональность ajax была добавлена благодаря прогрессивному улучшению, а страницы без ajax / ajax идентичны на 100%).
Так что же происходит в IE?Он загружает страницу с хеш-тегом дважды!Он отправляет на страницу два запроса.
Это проблема, потому что я отменяю свою переменную $_SESSION['sent']
, поэтому пользователь сталкивается с тем, что он нажимает кнопку отправить, а затем его сообщение, по-видимому, самоочищается.Он обрабатывает и отправляет на стороне сервера, но пользователь не может этого знать.
Это происходит во всех версиях IE или, по крайней мере, из IE9 и ниже.
Каквременное исправление, я просто решил сделать перенаправление заголовка на не-ajax-версию страницы, которая работает как положено.
Это небольшая проблема: переход немного менее плавный, но последующие клики на сайте вернут функциональность Ajax.Тем не менее, я все еще хотел бы знать, почему IE загружает мою страницу дважды.
Единственное, что я обнаружил, хотя бы немного связанное с этой проблемой, это то, что в IE теги img с пустыми атрибутами 'src' будутотправить запрос на корневую страницу, но на моей странице есть только один тег img, и он не пустой.Поэтому я не думаю, что это проблема.