始终获取 api return 相同的数据
Fetch api return same data always
每次单击我的一个按钮时,我都会触发对 adviceslip API 的调用以获取 advice
数据。我希望有效载荷会有所不同。但是每次调用后都返回完全相同的数据。
我尝试调用 getAdvice
函数作为回调,但没有成功。
我是不是漏掉了什么?
'use strict'
const title = document.querySelector('.advice-title')
const desc = document.querySelector('.advice-text')
const btn = document.querySelector('.btn')
const getAdvice = async () =>{
try{
const response = await fetch('https://api.adviceslip.com/advice');
if (!response.ok){
throw new Error('Api connection problem')
}
const responseJson = await response.json();
const data = responseJson.slip;
const id = `ADVICE #${data.id}`;
const advice = `"${data.advice}"`;
title.textContent = id;
desc.textContent = advice;
}
catch (e) {
console.error(e)
}
}
btn.addEventListener('click', () => {
getAdvice()
})
缓存似乎存在问题,来自网页的多个时间间隔很近的请求会导致返回相同的结果。如果我向 URL 添加一个唯一变化的值来阻止这样的缓存:
const response = await fetch('https://api.adviceslip.com/advice?t=' + Math.random());
然后,我每次都得到一个独特的回应。
我尝试发送各种 headers 来禁用缓存而不是 t=xxx
hack,但是那些 headers 触发了 CORs 错误并且 fetch()
没有成功,因为像这样的自定义 headers 不会通过“简单”CORS 请求的测试,因此需要目标站点不支持的 pre-flight。因此,每个请求的 xxx
不同的 ?t=xxx
似乎可以解决问题。
我找到了这个并且对我有用。添加
const response = await fetch("https://api.adviceslip.com/advice", { cache: "no-cache" });
每次单击我的一个按钮时,我都会触发对 adviceslip API 的调用以获取 advice
数据。我希望有效载荷会有所不同。但是每次调用后都返回完全相同的数据。
我尝试调用 getAdvice
函数作为回调,但没有成功。
我是不是漏掉了什么?
'use strict'
const title = document.querySelector('.advice-title')
const desc = document.querySelector('.advice-text')
const btn = document.querySelector('.btn')
const getAdvice = async () =>{
try{
const response = await fetch('https://api.adviceslip.com/advice');
if (!response.ok){
throw new Error('Api connection problem')
}
const responseJson = await response.json();
const data = responseJson.slip;
const id = `ADVICE #${data.id}`;
const advice = `"${data.advice}"`;
title.textContent = id;
desc.textContent = advice;
}
catch (e) {
console.error(e)
}
}
btn.addEventListener('click', () => {
getAdvice()
})
缓存似乎存在问题,来自网页的多个时间间隔很近的请求会导致返回相同的结果。如果我向 URL 添加一个唯一变化的值来阻止这样的缓存:
const response = await fetch('https://api.adviceslip.com/advice?t=' + Math.random());
然后,我每次都得到一个独特的回应。
我尝试发送各种 headers 来禁用缓存而不是 t=xxx
hack,但是那些 headers 触发了 CORs 错误并且 fetch()
没有成功,因为像这样的自定义 headers 不会通过“简单”CORS 请求的测试,因此需要目标站点不支持的 pre-flight。因此,每个请求的 xxx
不同的 ?t=xxx
似乎可以解决问题。
我找到了这个并且对我有用。添加
const response = await fetch("https://api.adviceslip.com/advice", { cache: "no-cache" });