Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fetch和pushState是否存在特定行为?_Javascript_Ajax_Fetch_Pushstate_Html5 History - Fatal编程技术网

Javascript fetch和pushState是否存在特定行为?

Javascript fetch和pushState是否存在特定行为?,javascript,ajax,fetch,pushstate,html5-history,Javascript,Ajax,Fetch,Pushstate,Html5 History,我在尝试使用pushState获取一些数据时遇到问题 所以我基本上有4个功能: 单击事件侦听器 获取所需链接的函数 触发动画的函数 以及获取此url的函数 在我试图推动历史上的一个国家之前,一切都很顺利 在我的获取请求之前或之后,history.pushState会出于某种原因中断请求,如:controller/controller/about.php 我尝试了一个console.log(url);在所有4个函数上,结果都是相同的(例如,获取一个好的url:controller/about.

我在尝试使用pushState获取一些数据时遇到问题

所以我基本上有4个功能:

  • 单击事件侦听器
  • 获取所需链接的函数
  • 触发动画的函数
  • 以及获取此url的函数
在我试图推动历史上的一个国家之前,一切都很顺利

在我的获取请求之前或之后,history.pushState会出于某种原因中断请求,如:controller/controller/about.php

我尝试了一个console.log(url);在所有4个函数上,结果都是相同的(例如,获取一个好的url:controller/about.php)

我在fetch请求中尝试了history.pushState,它工作正常(例如加载controller/about.php),但我需要处理popstate事件并再次调用相同的fetch函数

我的总结代码:

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);

这就是相对路径的工作原理。最后一个
/
之后的所有内容都将被丢弃,并追加相对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可以指定
,而不是
获取
位置获取。href

调用
pushState
前后页面的URL是什么?如果我在changePage(newPage)之前调用pushState;url是controller/article.php,但fetch返回一个404,试图在changePage(newPage)之后访问controller/controller/article.phpIf,我调用pushState;同样的行为,我认为你误解了。在调用
pushState
之前和之后,浏览器地址栏中的URL是什么?之前:root(localhost/folder)之后:localhost/folder/controller/article.phpOh,就这么简单!谢谢你的帮助和耐心@Quentin