Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!