Вы использовали асинхронный XMLHttpRequest
. Итак, проблема в следующей строке:
return JSON.parse(JSON.stringify((typeof response_data === 'undefined' || response_data === null || response_data.toString().split(',').length <= 1 ? xhr.response : response_data)));
Это находится вне слушателя события, и данные не доступны, когда эта строка выполняется.
Чтобы это работало, используйте синхронный XMLHttpRequest
(не рекомендуется):
xhr.open('GET',target_url,false)
Или используйте async / await:
async function getJSON(target = null)
{
var response_data = [];
var target_url = target;
var xhr = new XMLHttpRequest();
xhr.open('GET', target_url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
await new Promise((resolve,reject)=>{
xhr.addEventListener("readystatechange", function ()
{
if(xhr.readyState === 4)
{
if(xhr.status >= 200 && xhr.status < 304)
{
response_data.push(xhr.response);
}
else
{
response_data.push(await getJSON(target_url));
console.log('[XHR-DEBUG]: Unexpected HTTP response code: ' + xhr.status + ': ' + xhr.statusText + '(' + target_url + ')');
}
resolve()
}
});
xhr.send()
});
return JSON.parse(JSON.stringify((typeof response_data === 'undefined' || response_data === null || response_data.length <= 1 )? xhr.response : response_data));
}
Смотри также:
Асинхронная функция
Promise
Ожидать оператора
Я надеюсь, что это поможет вам!