Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
¿Mi función registrará datos JSON de un XMLHttpRequest pero no los devolverá?

Estoy tratando de acceder a la API de NHL para un proyecto personal. Estaba recibiendo errores de solicitud de CORS y encontré la siguiente solución para acceder a todos los diferentes sitios (algunos funcionaron antes y otros no).

Estoy pasando a través de un enlace y, según uno de los resultados , parece estar accediendo a los datos en la página y mostrándolos en formato JSON y de cadena. El único problema es que no puedo devolver ninguno de esos datos fuera de la función como un objeto o de otra manera.

Los últimos 2 registros muestran indefinidos, y los 2 dentro de la función generan los datos que quiero. ¿Me estoy perdiendo algo obvio o hay un problema más profundo con el acceso al sitio web?

Gracias.

 function getJSON(url){ let request = new XMLHttpRequest(); request.open('GET', url); request.onload = function () { // Begin accessing JSON data here let data = JSON.parse(this.response); if (request.status >= 200 && request.status < 400) { //Start writing function here console.log(data); console.log(JSON.stringify(data)); let data2 = JSON.stringify(data) return data2 } else { console.log('error'); } } request.send(); } let data1 = getJSON("https://statsapi.web.nhl.com/api/v1/people/8476459/stats?stats=statsSingleSeason&season=20212022") console.log(data1); console.log(JSON.stringify(data1));
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Está realizando una llamada asíncrona, lo que significa que devuelve el valor antes de que la respuesta regrese, es por eso que data1 no está undefined

Puedes ver este post para más información.

Para su caso, puede envolver la solicitud con Promise

 async function getJSON(url) { return new Promise(function (resolve, reject) { let request = new XMLHttpRequest(); request.open('GET', url); request.onload = function () { // Begin accessing JSON data here let data = JSON.parse(this.response); if (request.status >= 200 && request.status < 400) { //Start writing function here let data2 = JSON.stringify(data) return resolve(data); } else { return reject('error') } } request.send(); } ) } async function main() { let data1 = await getJSON("https://statsapi.web.nhl.com/api/v1/people/8476459/stats?stats=statsSingleSeason&season=20212022") console.log(data1); console.log(JSON.stringify(data1)); } main();

Una mejor manera es usar Fetch API

 async function getJSON(url) { const data1 = await fetch(url). then(response => response.json()); return data1; } async function main() { const result = await getJSON('https://statsapi.web.nhl.com/api/v1/people/8476459/stats?stats=statsSingleSeason&season=20212022'); console.log(result); } main();

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda