Добрый день.
Попался мне этакий SPA, где страницы открываются без перезагрузки посредством ajax запросов. То есть, отслеживаются нажатия на любые ссылки, если это страница, на сервере ее html рендерится, вытаскиваются ее скрипты и стили, потом js вставляет вместо текущей страницы новый html, приправляя скриптами и стилями. Получилась загрузка страницы без перезагрузок. Работает все хорошо, но есть одна жалоба. Почему-то иногда на некоторых страницах, где свои скрипты, эти самые скрипты не работают. То работают, то нет. Чтобы заработали, надо перезагрузить страницу, тогда работают всегда.
Полез в консоль и увидел, что иногда возникает ошибка редекларирования переменных. Именно в этих случаях скрипты на странице перестают работать. Прошерстив js я понял, что редекларирования нет. Оно может появиться, только если один и тот же js файл дважды подключить. Полез следить за сетью и действительно, иногда при загрузке очередной страницы, ее js файл грузится дважды и вылезает ошибка. К слову, html тоже дважды грузится. И стили дважды.
Логично предположить, что ajax запрос отрабатывает дважды, вместо одного раза. Сделал самопальный блок. Выглядит так:
//До Ajax:
let blockAjaxRequest = 0;
//Нажатие на ссылку
console.log('Pressed to link at ' + currentDate.getTime());
if( blockAjaxRequest === 1 ) {
console.log('BLOCKED!');
return false;
}
blockAjaxRequest = 1; }
ajax{
//параметры....,
success: function (res) {
blockAjaxRequest = 0;
}
}
То есть, до аякса мы задаем блокировку = 0. Во время нажатия на ссылку вставляем текущее время (чтобы отследить значения, вдруг с разницей в долю секунды отправляются), ну и в самом аяксе до отправки ставится значение 1, при котором еще раз отправить запрос уже нельзя. А после выполнения запроса обратно меняется на 0, т.е. можно еще один запрос отправить.
Защита не сработала, все тоже самое. Решил еще поглядеть в консоль и увидел такое. Предыдущий разраб на месте аякс запроса добавил console.log('AJAX!!!!!'). Я первым делом эту надпись снес, добавил вместо нее текущую дату. Но запись эта все равно появляется. Такое ощущение, что старый js файл, который я удалил и заменил на новый, грузится вместе с новым, хотя физически его быть нигде не может. Сначала кеш чистил комбинацией клавиш ctrl + f5, но это не помогло. Затем в мазиле для этой страницы удалил все данные и куки, а в хроме вообще всю историю и весь кеш какие были. И знаете что, надпись все равно вставляется откуда-то. Выглядит это так:
И откуда это берется? Тот же хром ссылается на какой-то "(индекс)", где реально лежит старый код.
Этого кода нет нигде. Файл я удалил, его даже под другим названием нет на сервере. В браузере кеш, куки и всю историю вычистил. Откуда это берется?