#javascript #json #post #xmlhttprequest
Вопрос:
Я вызываю запрос HTTP POST, ответом являются данные JSON.
ОТПРАВИТЬ запрос:
const postXHR = new XMLHttpRequest();
postXHR.open('POST', postOptions);
postXHR.setRequestHeader("Accept", "text/json");
postXHR.setRequestHeader("Content-Type", "text/json");
postXHR.onreadystatechange = function() {
const response = postXHR.response;
if (response.response) {
console.log(postXHR.status);
}
createNewOptionValues(response);
}
postXHR.send('{"optionName":"optionName46", "platformName":"platformName46","dotDigitalId":3,"googleId":4}');
Данные после ответа/JSON:
{
"data": {
"rooftopGoogleOptionId": 99,
"googleId": 4,
"dotDigitalId": 3,
"optionName": "optionName46",
"optionValue": null,
"platformName": "platformName46",
"googleAccount": null,
"dotDigitalAccount": null,
"updatedBy": null,
"updatedAt": null,
"createdBy": "root",
},
"status": 201,
"message": "success"
}
Функция createNewOptionValue должна регистрировать значение свойства в ответе.
function createNewOptionValues(obj){
console.log(obj.googleId);
console.log(obj['googleId']);
}
Тем не менее, вывод не определен, при использовании console.log(obj) ответ действительно отображается.
Комментарии:
1. Вам нужно позвонить
JSON.parse()
, чтобы преобразовать JSON в объект.2. Это приводило к ошибке «неожиданный конец ввода json», пока я не добавил .data после obj и до .googleId
3. Ни одно из них не должно влиять
JSON.parse()
на то, работает ли оно.4. Я понимаю, о чем вы говорите, я просто сообщаю вам, что простое добавление JSON.parse(obj.googleId) в код не решило проблему, вместо этого была выдана ошибка, ошибка исчезла, когда . данные были включены как JSON.parse(obj.data.googleId);
5. Так и должно быть
JSON.parse(obj)
.
Ответ №1:
Когда вы получаете ответ, он находится в «текстовом» формате (в большинстве случаев), поэтому вам нужно передать этот ответ в JSON.parse для доступа к нему как к объекту JSON.
Добавление всего 1 строки в функцию createNewOptionValues позволит ей работать. Кроме того, вам необходимо получить доступ к obj.data.googleId вместо доступа к obj.googleId
function createNewOptionValues(obj){
obj = JSON.parse(obj)
console.log(obj.data.googleId);
console.log(obj.data['googleId']);
}