问题已解决。这实际上是一个完全不同的问题,与 fetch/ajax/etc 无关,而是通过引用更新了不需要的对象。
误导我的是,我使用的实际代码在 console.log 之后有一个后续步骤。随后的步骤改变了数据 json,结果 console.log 的值也改变了。它是通过深度克隆 json 来修复的。
我仍然不确定的是为什么console.log 在数据更改之前出现但受到影响——猜测console.log 在这种情况下是异步的。
=================== 原文:
超级奇怪的问题。我的前端需要从后端获取数据,所以我使用了 fetch 的 Promise 链式风格,例如
fetch(myUrl, {credntials: 'include'})
.then(res=>{
if(res.status==200){
return res.json()
}
else{
return null
}
})
.then(json=>{
if(json){
console.log(json)
}
})
似乎工作正常,我得到了一些数据。但是,我注意到解析的 JSON 与来自后端的预期响应不同。例如,后端输出{'a': {'aa':1, 'bb':1}},并且解析res.json()给了我类似的东西{'a': {'aa':2, 'bb':1}}。更改似乎不一致,res.json()一次又一次尝试时我得到了不同的价值。
然后我尝试了几种不同的方式来获取数据:
1) 在浏览器地址栏中输入 url => 得到正确的数据
2) 使用 jQuery ajax 方法而不是 fetch => 得到正确的数据
3) 将承诺链更改为 async/await => 这也得到了正确的数据!
let resp = await fetch(myUrl, {credentials: 'include'})
let json = await resp.json()
console.log(json)
4)尝试了承诺链式提取,仍然不正确的数据!
超级迷茫。我使用 fetch 错误吗?它是一个错误吗?是浏览器吗?是polyfill(我正在使用"whatwg-fetch": "3.0.0",但在Chrome,Mac上,理论上polyfill应该不会影响任何东西)?是响应头设置(Django、JsonResponse)吗?有没有人有类似的经历?
PIPIONE
慕森卡
红糖糍粑
随时随地看视频慕课网APP
相关分类