#javascript #xmlhttprequest
Вопрос:
Как я могу проверить, имеет ли ответ, полученный от XMLHttpRequest, определенный класс или нет?
async function swipeAction(currentElementObj) {
var cardId = currentElementObj.getAttribute("value");
var dataString = {'card': cardId};
let response = await new Promise(resolve => {
var xhr = new XMLHttpRequest();
xhr.open("POST", "processes/explore.php", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(dataString));
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 amp;amp; xhr.status == 200) {
// I WANT TO CHECK SOMETHING LIKE THIS
if(xhr.response.getElementById("matched").classList.contains('matched'))
alert(xhr.response.getElementById("matched").classList);
}
}
});
}
В полученном ответе я хочу проверить, имеет ли элемент с идентификатором matched
имя класса matched
или нет. Однако приведенный выше код не работает. Каким должен быть правильный подход здесь?
Комментарии:
1. @Энди, я новичок в javascript.. Как мне создать код для JSON ?
2. Вы в значительной степени согласны с
content-type
заголовком запроса. Он сообщает серверу формат тела запроса. Именноcontent-type
ответ от сервера сообщает клиенту формат ответа.
Ответ №1:
Если вы ожидаете простого text/html
ответа от сервера, то его обработка может выглядеть так:
async function swipeAction(currentElementObj) {
var cardId = currentElementObj.getAttribute("value");
var dataString = { card: cardId };
let response = await new Promise((resolve, reject) => {
try {
var xhr = new XMLHttpRequest();
xhr.open("POST", "processes/explore.php", true);
xhr.setRequestHeader("Content-Type", "application/json");
// add responseType = "document" for response to be parsed into DOM
xhr.responseType = "document";
// override response mime type (in case your server sends text/plain)
xhr.overrideMimeType("text/html");
xhr.send(JSON.stringify(dataString));
xhr.onreadystatechange = function () {
// check for non-empty responseXML property
if (xhr.readyState == 4 amp;amp; xhr.status == 200 amp;amp; xhr.responseXML) {
const matched = xhr.responseXML.getElementById("matched");
if (!matched) return reject("Element not found in response");
if (matched) {
alert(matched.classList.contains("matched"));
resolve(true);
}
} else {
return reject("Incompatible response format");
}
};
} catch (e) {
reject(e.toString());
}
});
}
Комментарии:
1. Спасибо, чувак! Это работает так, как и ожидалось. Научился этому.