Javascript Fetch returns 404 occasionally(JavaScript FETCH偶尔返回404)
问题描述
我们发现,我们的.fetch命令偶尔会返回404。即使该文件存在并且经常被点击,有时它也会收到404。 数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
window.fetch('/category/somepage', {
credentials: 'same-origin',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(app.addAntiForgeryToken(postData))
})
.then(function(response) {
if (response.ok) {
return response.json();
}
throw new Error('Network response was not ok');
})
.then(result => {
if (result.Status === 'OK') {
//...
}
})
目前正在使用throw new Error
捕获它。
由于我们需要解决此问题,强制再次尝试此操作直到页面命中的最佳方式是什么?我们是否应该显示一个重试按钮,或者有什么方法可以循环执行该按钮?我不确定这为什么会抛出404,因为该文件肯定一直存在。
推荐答案
此处的典型做法是重试该操作,因为网络通信可能不可靠,尤其是在移动设备上。但瞬时404是另一个问题,它指向Web服务器的问题,可能需要单独诊断。(例如:如果是充当单个终结点的Web服务器群集,则其中一个服务器可能配置错误,因此找不到其他服务器可以找到的资源。)
但对于暂时性故障,典型的做法是重试:
function fetchJSONWithRetry(input, init, retries = 10) {
return fetch(input, init)
.then(function(response) {
if (response.ok) {
return response.json();
}
throw new Error('Network response was not ok'); // I usually use `new Error("HTTP status " + response.status)`
})
.catch(error => {
if (retries <= 0) {
throw error;
}
return fetchJSONWithRetry(input, init, retries - 1);
});
}
用法如下:
fetchJSONWithRetry('/category/somepage', {
credentials: 'same-origin',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(app.addAntiForgeryToken(postData))
})
.then(result => {
if (result.Status === 'OK') {
// ...
}
})
.catch(error => {
// All retries failed, handle it
});
(input
和init
是throw new Error
的名称,所以这就是我上面使用的名称。)
这篇关于JavaScript FETCH偶尔返回404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:JavaScript FETCH偶尔返回404


- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01