Кэширование в браузере IE и плагин jQuery Form - PullRequest
3 голосов
/ 22 февраля 2010

Как и многие потерянные души до меня, я барахтаюсь в яме со змеями, которая представляет собой отправку формы Ajax и кеширование в браузере IE.

Я пытаюсь написать простой скрипт, использующий плагин jQuery Form для Ajaxify комментариев Wordpress. Он отлично работает в Firefox, Chrome, Safari и др. al., но в IE текст ответа кэшируется, в результате чего Ajax получает неправильный комментарий.

    jQuery(this).ajaxSubmit({
        success: 
            function(data) {
                var response = $("<ol>"+data+"</ol>");
                response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow');
            }           
        });

ajaxSubmit отправляет комментарий в wp-comments-post.php, который неуверенно выплевывает всю страницу в ответ. Таким образом, несмотря на то, что это ужасно, как жабы, я помещаю текст ответа в переменную, используя: last, чтобы изолировать самый последний комментарий, и сдвигаю его на место.

IE, однако, возвращает кэшированную версию страницы, которая не содержит новый комментарий. Поэтому «.commentlist li: last» выбирает предыдущий комментарий , дубликат которого бесполезно скользит вниз под оригиналом.

Я пытался установить «cache: false» в параметрах ajaxSubmit, но это не имеет никакого эффекта. Я попытался установить параметр URL-адреса и использовать случайное число или временную метку, но в итоге он подключается к POST, который отправляет комментарий на сервер, а не к GET, который возвращает ответ, и поэтому не имеет никакого эффекта. Я не уверен, что еще попробовать. В IE все работает нормально, если я отключаю кеширование браузера, но, очевидно, это не то, чего я могу ожидать от любого, кто просматривает страницу.

Любая помощь будет высоко оценена. Заранее спасибо!

РЕДАКТИРОВАНИЕ С ОТЧЕТОМ О ПРОГРЕССЕ : Несколько человек предложили использовать заголовки PHP для предотвращения кэширования, и это действительно работает. Проблема в том, что wp-comments-post выплевывает всю страницу при отправке нового комментария, и единственный способ увидеть, как я могу добавить заголовки, - это поместить их в шаблон поста Wordpress, который вообще отключает кэширование всех постов. времена - не совсем то поведение, которое я ищу.

Есть ли способ установить условное выражение php - «if is_ajax» или что-то в этом роде - так, чтобы заголовки не применялись во время обычной загрузки страниц, но подключались ли они, если страница была вызвана Ajax GET?

Ответы [ 4 ]

2 голосов
/ 15 мая 2010

jQuery.ajaxSubmit () принимает любой из параметров для стандартного jQuery.ajax () . Таким образом, вы можете использовать стандартную опцию cache: false , чтобы отключить кэширование:

jQuery(this).ajaxSubmit({
    cache: false,
    success: 
        function(data) {
            var response = $("<ol>"+data+"</ol>");
            response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow');
        }           
    });
1 голос
/ 22 февраля 2010

Я сделал это, добавив rand = new Date (). GetTime () в конец

if(url.replace("?") != url)
   url = url+"&rand="+new Date().getTime();
else
   url = url+"?rand="+new Date().getTime();

Приведенная выше функция добавит rand = time к адресуurl [address to .php] Если вы указали параметры get, он добавит & rand = time ... в противном случае он добавит? rand = time. Браузер продолжает кэшировать, но страницы не перекрываются.

Вы также можете использовать заголовок PHP (), чтобы отключить кэширование, установив Cache-control: и Expires:

0 голосов
/ 23 июня 2014

Это предотвратит глобальное кэширование

$(document).ready(function() {
     $.ajaxSetup({ cache: false });
});
0 голосов
/ 23 февраля 2010

Поместите это в начало вашего php:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

Это должно помочь. Если это не так - попробуйте ввести случайное число в качестве имени файла с заголовками.

Сообщение перенаправляется на запрос get, и вам нужно будет отправить некоторую информацию на страницу get, чтобы определить, следует ли ее кэшировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...