Durante una llamada de URL de API en mi aplicación web, mi página html se bloquea inesperadamente y arroja un error de "memoria insuficiente". Realmente no estoy seguro de cuál es el problema. Estoy usando el objeto xhr para obtener datos del servidor. Probé varias api de búsqueda de hoteles de api rápida , pero cada una de ellas causó el mismo problema. Mis códigos son:
JAVASCRIPT UNO
const btn4 = document.querySelector('#hotelBtn') btn4.addEventListener('click', function showHotels(e) { var userQuery = $('#hotelQuery').val(); const data = null; const xhr = new XMLHttpRequest(); xhr.addEventListener("readystatechange", function () { if (this.readyState === this.DONE) { var hotelObj = JSON.parse(this.responseText) console.log(hotelObj) var myContainer = document.getElementById('query_results') for (let i = 0; hotelObj.length; i++) { var myCol = document.createElement('div') myCol.setAttribute('class', 'col') var myRow = document.createElement('div') myRow.setAttribute('class', 'row') myRow.append(myCol) myContainer.append(myRow) } } }); xhr.open("GET", "https://booking-com.p.rapidapi.com/v1/hotels/locations?locale=en-gb&name=" + userQuery); xhr.setRequestHeader("x-rapidapi-host", "booking-com.p.rapidapi.com"); xhr.setRequestHeader("x-rapidapi-key", "mykey"); xhr.send(data); e.preventDefault()})
HTML UNO
<div id="query_results"> <!-- Filled by Javascript --> </div>Parece que tienes un bucle infinito en tu código.
Querrá verificar que el bucle finalice según el tamaño de la longitud de la matriz ...
for (let i = 0; i < hotelObj.length; i++) {
En el código mencionado, la condición en el bucle for implementado será verdadera para todas las iteraciones y, por lo tanto, se produce el problema. La solución provista por @inki es la solución correcta ya que el bloque de condición verifica si i<length , que será falsa al final de la matriz y sale del bucle. Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for
He reemplazado el bucle for tradicional con la estructura de bucle foreach. El problema parece resuelto ahora mismo. En la tradición del bucle, el bucle puede ejecutarse infinitas veces, lo que provoca una excepción de falta de memoria.