Javascript 为什么Safari复制GET请求,而Chrome没有?
更新 TL;DR:这可能是Safari和/或Webkit中的一个错误 较长的TL;DR:在Safari中,在使用Fetch API发出GET请求后,即使发出请求的代码被删除,Safari也会在页面重新加载时自动(无意)重新运行请求 新发现的最小可复制代码(以下由Kaido提供): 前端Javascript 为什么Safari复制GET请求,而Chrome没有?,javascript,node.js,safari,duplicates,fetch,Javascript,Node.js,Safari,Duplicates,Fetch,更新 TL;DR:这可能是Safari和/或Webkit中的一个错误 较长的TL;DR:在Safari中,在使用Fetch API发出GET请求后,即使发出请求的代码被删除,Safari也会在页面重新加载时自动(无意)重新运行请求 新发现的最小可复制代码(以下由Kaido提供): 前端 fetch(“/url”) 原创帖子 我有一个javascript web应用程序,它使用FetchAPI在Node.js(express)服务器上发出GET请求 在Safari中(问题在于): 请求按预期完成
fetch(“/url”)
原创帖子
我有一个javascript web应用程序,它使用FetchAPI在Node.js(express)服务器上发出GET请求
在Safari中(问题在于):
请求按预期完成
但是
当我重新加载页面时,它将重新发送GET请求,从而导致重复
在铬中(作为控制):
一切正常
HTML
前端JS
class ErrorReproduce{
constructor(){}
makeButton(){
let button = document.createElement('button');
button.innerText = 'Send get request';
button.onclick = ()=>{
this.asyncMethod();
};
buttonTarget.appendChild(button);
}//end makeButton()
async asyncMethod(){
let data = await fetch('path/to/testError', {
method: 'GET',
cache:'no-cache',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
},
}).then(response => response.json());
}//end asyncMethod
}//end ErrorReporduce
let errRepro = new ErrorReproduce();
errRepro.makeButton();
后端JS
router.get('path/to/testError',(req,res)=>{
res.send({ok:true});
})
如何复制
WebKit中的错误已修复。链接到您的意思是,您先单击该按钮,然后重新加载页面,在不再次单击按钮的情况下,浏览器会自动发出请求?你是如何重新加载页面的?如果您将您的
类型属性设置为“button”
,该怎么办?@kaido更正:(1)单击按钮-查看日志中的请求(2)在不再次按下按钮的情况下重新加载页面(我使用CMD+R)-再次查看日志中的请求。我将尝试你的建议,并编辑我的问题,以包括新的信息。谢谢。@kaido我试过button.type='button'和button.setAttribute('button'),但错误仍然存在。我将尝试一个不同的页面重新加载。终于有一点时间来测试它,我可以重新加载。。。在使用XMLHttpRequest时也会发生这种情况,在解析时从全局范围执行请求时也会发生这种情况。这意味着一个最小的复制就是fetch('/url')
然后重新加载,看看每次重新加载时如何得到两个对/url的请求,然后即使删除了
标记,仍然是一个来自任何地方的请求。我再一次用完了进一步挖掘的时间,但老实说,我会认为这是一个错误,并建议您打开WebKIT的Bug Trrace.Ps上的一个问题。应该注意的是,这些请求是从网络面板中隐藏的,即使是“保存日志”。注释不是永久的,您至少可以在这个答案中包含bug报告的链接。