TypeError: "Network request failed"
是一个常见的错误,通常表示浏览器在尝试执行网络请求时遇到了问题。以下是一些可能导致此错误的原因以及相应的解决方法:
确保服务器端设置了正确的CORS(跨源资源共享)策略。例如,在服务器端添加以下响应头:
Access-Control-Allow-Origin: *
或者指定允许的源:
Access-Control-Allow-Origin: https://example.com
确保用户的设备已连接到互联网,并尝试重新发起请求。
使用工具如ping
或curl
检查服务器是否可达,并查看服务器日志以了解是否有错误信息。
可以通过设置timeout
属性来控制请求的超时时间:
const controller = new AbortController();
const signal = controller.signal;
setTimeout(() => controller.abort(), 5000); // 5秒超时
fetch('/api/data', { method: 'POST', signal })
.then(response => response.json())
.catch(e => console.error('Fetch error:', e));
如果遇到SSL证书错误,可以尝试以下方法:
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data),
mode: 'cors',
credentials: 'include',
redirect: 'follow',
referrerPolicy: 'no-referrer',
signal: AbortSignal.timeout(5000)
}).catch(e => {
if (e.name === 'AbortError') {
console.error('Fetch timeout');
} else {
console.error('Fetch error:', e);
}
});
以下是一个完整的fetch请求示例,包含了错误处理和超时设置:
const controller = new AbortController();
const signal = controller.signal;
setTimeout(() => controller.abort(), 5000); // 5秒超时
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ key: 'value' }),
signal
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.json();
})
.then(data => console.log(data))
.catch(e => {
if (e.name === 'AbortError') {
console.error('Fetch timeout');
} else {
console.error('Fetch error:', e);
}
});
通过以上方法,可以有效地诊断和解决TypeError: "Network request failed"
错误。
领取专属 10元无门槛券
手把手带您无忧上云