问题已解决。这实际上是一个完全不同的问题,与 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)吗?有没有人有类似的经历?
添加回答
举报
0/150
提交
取消
