fetch Prototype.json () повреждает / изменяет данные тела - PullRequest
0 голосов
/ 20 февраля 2019

Я уже неделю бьюсь головой.Это невозможно, и все же это происходит (я знаю, яваскрипт):

Я использую 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": {} 
            }
         ]

Однако консоль регистрирует оба устройства с идентификатором 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,
                    });

Одно уточнение: часть «Единицы» (та, которая повреждена) является свойством объекта «свойство».Теперь, когда я пишу это, возможно ли, что «свойство» - это какое-то зарезервированное слово, и оно что-то запутывает?*

this.setState({element: json.property})

Есть идеи?

1 Ответ

0 голосов
/ 20 февраля 2019

Хорошо, оказалось, что проблема заключается в функции this.setState (), так как она как-то портит данные.Таким образом, выборка response.proptotype.json () работает, как и ожидалось.Я открываю новый выпуск, чтобы отследить настоящую проблему.Спасибо @ChrisG за указания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...