javascript - fetch Prototype.json() 损坏/更改正文数据
问题描述
我已经敲了一个星期的头。这是不可能的,但它发生了(javascript,我知道):
我正在使用 fetch 从服务器获取数据,如下所示:
fetch(this.props.url, {
method: 'POST',
body: JSON.stringify({
class: 'property',
action: 'view',
objectId: this.props.element.id,
token: this.props.token,
}),
})
.then(response => response.json())
.then(json => {
console.log(json);})
现在,使用 Postman 进行测试可以得到正确的结果:
"units": [
{
"amount_due": 22.0,
"id": 31,
"floor": 5,
"common_percentage": 0.012223,
"building": {}
},
{
"amount_due": 16.0,
"id": 33,
"floor": 5,
"common_percentage": 0.012143223,
"building": {}
}
]
但是,控制台会记录 id 为 33 的两个单元。
检查后端 100 次,它返回正确的数据。邮递员证实了这一点。还尝试使用 .text() 而不是 .json() 解析响应,并且 .text() 返回正确的数据。这种损坏仅发生在 .json() 中。我是疯了还是发现了 .json() 方法的错误(或特殊性)?
谢谢。
编辑1:
感谢@ChrisG,我发现我的代码以某种方式破坏了数据。这一切都发生在 this.setState 被调用之后:
let completedProjects = json.property.projects.filter((project) => project.finish_date);
let completedJobs = json.property.jobs.filter((job) => job.complete.filter((completion) => completion.id == this.props.user.id).length > 0 && !job.on_hold && !job.deleted);
let timeline = [{title: <Trans>heading.property.added</Trans>, createdAt: <Moment locale={this.props.i18n.language} format="ll">{json.date_created}</Moment>, comment: <Trans>description.property.added</Trans>, icon: <FontAwesomeIcon icon="home" />, sortCriterion: this.props.element.date_created }];
let inspections = this.state.inspections;
json.inspections.map((inspection)=>{
inspections.push({description: inspection.type.description, date: <Moment format="ll">{inspection.instance.date_performed}</Moment>, name: inspection.type.name, interval: inspection.type.interval, typeId: inspection.type.id, });
});
completedProjects.map((project) => {
timeline.push({title: <Trans>heading.project.completed</Trans>, createdAt: <Moment format="ll">{project.finish_date}</Moment>, comment: project.name, icon: <FontAwesomeIcon icon="project-diagram" />, sortCriterion: project.finish_date, iconColor: '#007bff' });
});
completedJobs.map((job) => {
timeline.push({title: <Trans>heading.job.finished</Trans>, createdAt: <Moment format="ll">{job.finish_date}</Moment>, comment: job.name, icon: <FontAwesomeIcon icon="check" />, sortCriterion: job.finish_date, iconColor: '#007bff' });
});
timeline.sort((a, b) => a.sortCriterion < b.sortCriterion);
this.setState({
element: json.property,
activeJobs: json.property.jobs.filter((job) => job.complete.filter((completion) => completion.id == this.props.user.id).length == 0 && !job.on_hold && !job.deleted),
completedJobs: completedJobs,
remainingJobs: json.property.jobs.filter((job) => job.on_hold || job.deleted),
// activeProjects: json.property.projects.filter((project) => !project.finish_date),
activeProjects: json.property.projects,
completedProjects: completedProjects,
collapse: true,
timeline: timeline,
});
一个澄清:“单位”部分(被破坏的部分)是“属性”对象的属性。现在我正在写这篇文章,“property”是否可能是某种保留字,它会弄乱事情?
编辑2:
将问题归结为:
this.setState({element: json.property})
有任何想法吗?
解决方案
好的,原来问题出在 this.setState() 函数中,因为它以某种方式破坏了数据。因此,按预期获取 response.proptotype.json() 函数。我正在打开一个新问题来跟踪真正的问题。感谢@ChrisG 的指示。
推荐阅读
- swift - 架构 arm64 的 1 个重复符号
- java - 在计算 n 的幂集时找到长度为 k 的所有子集?
- javascript - 构造“WebSocket”失败:URL“{{.}}”无效
- dart - 如果变量不为空,则为类设置参数
- javascript - 在 HTML 画布上循环绘制图像时,图像正在切换
- javascript - 我将如何在 Mongoose 和 Express 中引用我的问题模型
- compilation - 除了 OpenCL 标准之外,NVIDIA OpenCL 编译器还支持哪些标志?
- google-sheets - vlookup 获取最新匹配的重复项
- flutter - Flutter Firebase apiKey、appId、messagingSenderId 和 projectId
- reactjs - 如何解决 reactjs 程序中的代码格式化问题?