Я получаю readystate неопределенным и статус 0 в качестве ответа, когда я вызываю один и тот же API несколько раз и вызываю его быстро один за другим. У меня есть кнопки на моей веб-странице для вызова API, и если я даю пробел в нажатии, например, 3 секунды, API работает нормально. Я проверил внутреннюю службу отдыха openAPI (swagger), которая работает нормально, даже если я быстро ее вызываю.
Поэтому я попытался провести некоторое тестирование с readystate и, что интересно, в то время как выходные данные readystate "undefined", условие if для readystate == 4 работает и выдает выходные данные как "undefined" и статус "0". Смотрите последнее, если условие.
Но главный вопрос в том, почему я получаю неопределенность, когда бэкэнд работает нормально? и API также работает нормально, если вызывается с задержкой? Добавить задержку сложно, потому что конечный пользователь может нажимать кнопки на экране, плюс я также не хочу ненужной задержки.
function getDocking(url,callBackFunction,btnId){
var xmlhttp = new XMLHttpRequest();
var response;
xmlhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
//Calling the callback function displayDocking once got response from server
callBackFunction(this,btnId);
}else if(this.readyState == 4 && this.status == 400)
{
document.getElementById('warning').style.display = "block";
document.getElementById("warning").innerHTML = this.responseText;
}
else if(this.readyState == 4)
{
alert("Received for button " + btnId + " Readystate: " + this.readystate + " Status: " + this.status)
callBackFunction(this,btnId);
}
};
xmlhttp.open( "POST", url , true );
xmlhttp.send(null);
//alert("Calling docking for Button " + btnId + " with URL " + url)
}