Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/12/2022, 13:32
Raditz99
 
Fecha de Ingreso: abril-2016
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Pregunta Cargar HTML antes de traer los datos de la BD con AJAX

Buen día a todos, tengo una aplicación Web que realiza un "load" de un HTML dentro de un div llamado "contenido" dentro de otro HTML:

Código Javascript:
Ver original
  1. function main_descuentos()
  2. {
  3.     $("#contenido").load(".html/main_descuentos.html");
  4.     init_des();
  5. }

Como ven realizo un "load" desde el archivo "descuentos.html" y luego de eso llamo a la funcion "init_des()" que lo que hace es inicializar el formulario trayendo datos de la BD a través de AJAX con este código:

Código Javascript:
Ver original
  1. function init_des()
  2. {
  3.     var xmlhttp = new XMLHttpRequest();
  4.     xmlhttp.onreadystatechange=function()
  5.     {
  6.         if (xmlhttp.readyState==4 && xmlhttp.status==200)
  7.         {
  8.             Cadena1 = xmlhttp.responseText.split('%')
  9.             var selUsu = document.getElementById("selUsuarios");
  10.             for (i=0 ; i<Cadena1.length-1 ; i++)
  11.             {
  12.                 Cadena2 = Cadena1[i].split('|');
  13.                 var opt1 = document.createElement("option");
  14.                 opt1.value = Cadena2[0];
  15.                 opt1.text = Cadena2[1];
  16.                 selUsu.add(opt1);
  17.             }
  18.         }
  19.     }
  20.  
  21.     xmlhttp.open("POST",".lib/link/linkDescuentos.php",true);
  22.     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  23.     xmlhttp.send("initDescuentos=1");
  24. }

Lo que hace esta función es llenar un "select" con todos los usuarios que están registrados en la BD.

El problema es que en algunos casos funciona bien pero en otros casos trae los datos antes que termine el "load" del HTML y por consiguiente no encuentra el "select" respectivo para poner los datos en él y luego muestra el "select" vacío.

Ya he tratado cambiando la asincronicidad de "true" a "false" pero cuando hago eso ya nunca funciona.

Gracias por la ayuda!!!