Есть ли определенное поведение с fetch и pushState? - PullRequest
0 голосов
/ 27 февраля 2020

У меня возникла проблема при попытке извлечь некоторые данные с помощью pushState.

Так что у меня в основном есть 4 функции:

  • прослушиватель событий при нажатии
  • a нужна функция для захвата ссылки
  • функция для запуска анимации
  • и функция для получения этого URL

Все работает нормально, пока я не попытаюсь набрать sh состояние в истории.

history.pushState до или после моего запроса на выборку прерывает запрос следующим образом: controller / controller / about. php по некоторым причинам.

I попробовал console.log (url); на всех 4 функциях и результат один и тот же (хороший URL для извлечения: controller / about. php например)

Я попробовал history.pushState внутри моего запроса на выборку, и он работает нормально (загружает контроллер / о. php например) но мне нужно работать с событием popstate и снова вызывать ту же функцию извлечения.

Мой обобщенный код:

const loadNewContent = async url => {
    const response = await fetch(url, { headers: headers });
    // Tried adding pushState inside fetch request
    // window.history.pushState(url, `${url}`, url);
};

// function that fires animations then load the last function
const changePage = url => {
    loadNewContent(url).catch(error => console.error(error));;
};

const ajax = e => {
    // Tried adding pushState before fetch fires
    // window.history.pushState(newPage, ``, newPage);
    changePage(newPage);
    // Tried adding pushState after fetch fires
    // window.history.pushState(newPage, ``, newPage);
};

// Click event fires ajax function
ajax(e);

1 Ответ

0 голосов
/ 27 февраля 2020

Так работают относительные пути. Все после последнего / отбрасывается, а относительный URL добавляется.

http://localhost/imparfait + controller/about.php становится http://localhost/controller/about.php

, а

http://localhost/imparfait/controller/article.php + controller/about.php становится http://localhost/controller/controller/about.php

Использовать абсолютный путь (начиная с /), относительный к схеме URL (начиная с //localhost), абсолютный URL (начиная с http://), или создайте URL, используя объект URL , который позволит вам указать base вместо fetch, получая его от location.href.

...