Javascript 尝试使用XMLHttpRequest获取JSON对象失败,导致引用为空
我试图在Javascript中使用XMLHttpRequest获取和解析JSON对象,但它总是失败并导致空引用Javascript 尝试使用XMLHttpRequest获取JSON对象失败,导致引用为空,javascript,json,functional-programming,xmlhttprequest,fetch,Javascript,Json,Functional Programming,Xmlhttprequest,Fetch,我试图在Javascript中使用XMLHttpRequest获取和解析JSON对象,但它总是失败并导致空引用 function getJSON(target = null) { var response_data = []; var target_url = target; var xhr = new XMLHttpRequest();
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');
xhr.send();
xhr.addEventListener("readystatechange", function ()
{
if(xhr.readyState === 4)
{
if(xhr.status >= 200 && xhr.status < 304)
{
response_data += xhr.response;
}
else
{
response_data += $.getJSON(target_url);
console.log('[XHR-DEBUG]: Unexpected HTTP response code: ' + xhr.status + ': ' + xhr.statusText + '(' + target_url + ')');
}
}
});
return JSON.parse(JSON.stringify((typeof response_data === 'undefined' || response_data === null || response_data.toString().split(',').length <= 1 ? xhr.response : response_data)));
}
预期结果:
["John eaten the cake","Stackoverflow is awesome"]
当前结果:
""
您使用了异步
XMLHttpRequest
。因此,问题在于以下几行:
return JSON.parse(JSON.stringify((typeof response_data === 'undefined' || response_data === null || response_data.toString().split(',').length <= 1 ? xhr.response : response_data)));
或使用异步/等待:
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));
}
异步函数getJSON(target=null)
{
var响应_数据=[];
var target_url=target;
var xhr=new XMLHttpRequest();
xhr.open('GET',target\u url,true);
setRequestHeader('Content-Type','application/json');
等待新的承诺((决定,拒绝)=>{
xhr.addEventListener(“readystatechange”,函数()
{
if(xhr.readyState==4)
{
如果(xhr.status>=200&&xhr.status<304)
{
响应\数据推送(xhr.响应);
}
其他的
{
response_data.push(等待getJSON(target_url));
console.log('[XHR-DEBUG]:意外的HTTP响应代码:'+XHR.status+':'+XHR.statusText+'('+target_url+'));
}
解决()
}
});
xhr.send()
});
返回JSON.parse(JSON.stringify((typeof response_data=='undefined'| | response_data===null | | response_data.length
xhr.open('GET',target_url,false)
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));
}