¿Como hacer que una funcion se dispare despues de que se cargue todo el documento?

publicado por: Anonymous

Actualmente obtengo un conteo de filas a travez de una pequeña consulta y dicho resultado lo mando a mi pagina principal que esta creada en asp.net

Actualmente lo estoy haciendo de estas formas y ninguna me ha funcionado.

Forma 1

  <script type="text/javascript">

      $(document).ready(function () {
          var lbltext = document.getElementById('lblPlanta').innerHTML;
          alert(lbltext);

      });

  </script>

Forma 2

  <script type="text/javascript">

      $(document).ready(function () {
          var lbltext = document.getElementById('lblPlanta').textContent;
          alert(lbltext);

      });

  </script>

Forma 3

  <script type="text/javascript">

      $(document).ready(function () {
          value = $("#lblPlanta").text();  
          alert(value);

      });

  </script>

Forma 4

  <script type="text/javascript">

      $(document).ready(function () {
          value = $("#lblPlanta").val();  
          alert(value);

      });

  </script>

Forma 5

  <script type="text/javascript">

      $(document).ready(function () {
          var lbltext = document.getElementById('lblPlanta').value;
          alert(lbltext);

      });

  </script>

Asi esta creada el Label. (En el codigo el label esta arriba del script)

<label id="lblPlanta"></label>

Inicialmente esta vacia la etiqueta porque ese se rellena de manera automatica, con el resultado que retorna de la BD. Dicho resultado lo imprimo en ese label y si se imprime pero el problema es que no lo puedo obtener para asignarlo a una variable.

Asignacion de la informacion a la etiqeuta

function getPlantas() {
    block();
    $.ajax({
        url: "../../../pagina/configuracion/empresa/confEmpresa.aspx/getPlanta",
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            $("#lblPlanta").html(data.d);

            $.unblockUI();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $.unblockUI();
        }
    });
}

Actualizacion

Al parecer mi problema es que intento obtener un valor antes de que este se cargue a travez del document.ready, asi que lo sustitui por el siguiente metodo:

  $(window).load(function () {
      value = $("#lblPlanta").text(); 
      alert(value);
  });

Pero me sigue trayendo en blanco el alert, alguien me podria mencionar alguna manera de hacer que se ejecute mi metodo despues de que todo se haya cargado.

solución

Las llamadas AJAX no son deterministicas en cuanto al tiempo que les puede tomar obtener el resultado a la petición. La mayoría de las veces esta sera retornada casi al instante, pero no es posible de controlar eso, la servidor que atiende a la petición puede estar congestionado y demorarse más de lo normal en responder y eso no lo puedes saber de antemano.

Por eso el camino no es subscribirse al window.onload o al dom.ready, ya que lo más probable de hecho es el código que realiza la llamada AJAX se comience a ejecutar justamente como respuesta a uno de estos dos eventos, y por lo tanto aún pasara un tiempo desde que se lanzaron los eventos anteriores y obtener la respuesta del servidor y colocar el resultado en el elemento #lblPlanta.

Una correcta solución ya la planteo @Naos y es subscribirte a un evento personalizado sobre el elemento #lblPlanta que lea su valor, y lanzar este evento desde el final del método success que realiza la petición AJAX.

_x000D_

_x000D_

function onLblPlantaChange () {_x000D_
    var lblPlantaValue = $('#lblPlanta').text();_x000D_
    alert(lblPlantaValue);_x000D_
}_x000D_
_x000D_
// Me subscribo al evento change sobre el elemento_x000D_
// y le asigno una función manejadora._x000D_
// En este caso que lea el valor desde el elemento_x000D_
$('#lblPlanta').on('change', onLblPlantaChange);_x000D_
_x000D_
$.ajax({_x000D_
    url: 'http://httpbin.org/get?d=Orquidea',_x000D_
    success: function (data) {_x000D_
        // Fijo el valor en el evento_x000D_
        // y lanzo el evento para que sea leido por_x000D_
        // la función manejadora._x000D_
        $('#lblPlanta')_x000D_
            .text(data.args.d)_x000D_
            .trigger('change')_x000D_
        ;_x000D_
_x000D_
    }_x000D_
});

_x000D_

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>_x000D_
_x000D_
<div id="lblPlanta">Valor Original</div>

_x000D_

_x000D_

_x000D_

Espero esto aclare un poco el problema.

Suerte y Saludos!

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *