неопределенный возврат на пост xhr. Я не знаю, в чем проблема.undefined on return свойство (XHR)
ответ
Итак, прежде всего, почему вы возвращаете что-то из onreadystatechange? Onreadystatechange - это функция обратного вызова, и вполне вероятно, что если вы используете ее явно (то есть var foo = d.onreadystatechange();), вы еще не получите ответа. Как именно вы используете это возвращаемое значение?
Во-вторых, я не уверен, что ваш синтаксис верен для условного «4 == d.readystate;» Возможно, я ошибаюсь, но думаю, вам нужно использовать оператор if.
В-третьих, вы также должны убедиться, что d.status == 200. Если d.readystate == 4, запрос завершен, но не обязательно успешно. Вам все равно нужно проверить, чтобы HTTP-статус запроса был 200 OK.
Приносим извинения, если неясно. Все это написано по телефону. Дайте мне знать, если вам нужны примеры. Надеюсь это поможет!
Поскольку вы выполняете async XMLHttpRequest, вы не можете вернуть значение из обратного вызова . Вместо этого вы должны использовать результат в этом обратном вызове или вызвать некоторую другую функцию и передать результат. Возвращая значение из этого обратного вызова, просто возвращает его в недрах движка XHR - он никогда не попадает в ваш код.
Кроме того, вам необходимо убедиться, что и readyState === 4
(что означает, что запрос завершен), и что у вас есть успешный код ответа, либо вам необходимо обработать код ошибки. Вот как:
var d = new XMLHttpRequest();
d.open("POST", url, true);
d.setRequestHeader("Content-type","application/json");
d.onreadystatechange = function(){
// if request has finished
if (this.readyState === 4){
// if request finished successfully
if (this.status === 200) {
// process this.responseText here
} else {
// process this.status error response code here
}
}
}
};
d.send(data);
Кроме того, одна символьная переменная не делает ваш код более удобочитаемым. Настоятельно рекомендуется использовать значимые имена для всех переменных. Код может быть сокращен с помощью минимизатора до развертывания, сохраняя читаемую версию для редактирования и обслуживания.