Задать вопрос
@kiranananda

Js pushState странности в chrome?

Пишу навигацию с помощью функций pushState. И именно в хроме вылазит баг. Как пример.
Открываем домашнюю страницу хрома, далее ввожу свой урл. Там Ajax приложение при переходе по ссылке создает pushState. Потом я нажимаю кнопки назад вперед все работает, но если я дойду до домашней страницы хрома, то при нажатии стрелочки "вправо", что бы вернуться на сайт, он меня выкидывает на код получаемый через Ajax запрос. я даже не знаю как это описать, в сафари все хорошо работает...

Части кода

window.onpopstate = (event) => {
                this.axiosSend( event.state == null ? this.startUrl : event.state, false )
            };

            axiosSend(url, pushState = true) {
                this.loading = true

                axios.get(url)
                .then( (response) => {
                    this.myData = response.data
                    if(pushState) history.pushState(url, '', url)
                })
                .catch( (error) => { console.log(error.response) })
                .then( () => {  this.loading = false } )
            },
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@kiranananda Автор вопроса
Проблемку таки удалось победить, вчера что то совсем не додумался. Но ответ может помочь кому нибудь.

В ларавел в контроллере идет проверка на тип запроса и если запрос аjax, то возвращается массив, иначе возвращаем html код. Выглядит это так

if ( Request::ajax() ) return $this->dataReturn;

        return view($templite, [ 'data' => $this->dataReturn ]);


Но вот браузеры по разным на то причинам, может кэш последнего запроса по Ajax с такими же параметры заставляет хром отправить запрос с заголовком XMLHttpRequest. Может еще как. На самом деле в сафари тоже появлялись проблемки, но уже в другом :).
Ну думаю ладно, не хотите по-хорошему добавлю к урлу параметр и в коде уже буду на него смотреть, а не на заголовки.

Делаю так
axios.get(url, { 
                    params: {
                        _ajax: true
                    }
                })


Ну думаю дай посмотрю в консоль, а оно все заработало. Видимо, когда я добавил параметр, запрос пошел уже не из кэша браузера со всеми заголовками, а тот который нужен и проверка заголовка на Ajax заработала... Даже не пришлось проверять на параметр _ajax
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы