Foros del Web » Programando para Internet » Jquery »

Ejecutar un Script sin ningun Evento

Estas en el tema de Ejecutar un Script sin ningun Evento en el foro de Jquery en Foros del Web. Buenas amigos, en mis desarrollos con jquery siempre ato los sucesos (Scripts) a eventos como BLUR, ONFOCUS, FOCUS, KEYUP, etc... de tal manera si un ...
  #1 (permalink)  
Antiguo 16/04/2014, 16:18
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Ejecutar un Script sin ningun Evento

Buenas amigos, en mis desarrollos con jquery siempre ato los sucesos (Scripts) a eventos como BLUR, ONFOCUS, FOCUS, KEYUP, etc... de tal manera si un input es tocado o modificado llame una funcion.

Ahora me encuentro con el problema que estoy haciendo uso de AJAX para consultar un dato en una base de datos Interbase:

Código Javascript:
Ver original
  1. $( "#fecha1" ).bind( "blur", function() {
  2.         //alert( "blur" );
  3.             if ($(this).val()!=null){
  4.                     var fecha = $('#fecha1').val().split("/");
  5.                     $.ajax({
  6.                         url: 'ventas.php',
  7.                         data: "dia="+fecha[0]+"&mes="+fecha[1]+"&ano="+fecha[2],
  8.                         dataType: 'json',
  9.                         success: function(data)
  10.                         {
  11.                             var Facturas = data[0];
  12.                             var Devoluciones = data[1];
  13.                             var Facturado = data[2];
  14.                             $('#tvale').val(Facturado);
  15.                             }
  16.                         });
  17.                     }
  18.                 else{
  19.                     alert('El campo Fecha debe tener una Fecha Válida');
  20.                     }
  21.         });

Eso deberia de colocarme en un campo las ventas del dia (segun el dia seleccionado), Bueno resulta que hay ocasiones donde ese Evento quizas se ejecute pero por mala practica del uso del servidor de la bd interbase o el trafico de red, la repuesta nunca llega... o tarda mucho en mostrarme el valor...

entonces hay una forma donde yo pueda llamar esa funcion si tener que especificar el evento? es decir
if fecha1 != null {ejecuta ajax} else {no hacer nada} ?

porque tambien hago esto:

Código Javascript:
Ver original
  1. $('#corte_caja').delegate('input[type=text]', 'blur', function () {
  2.                 var montosx = $('.sumar_montox').sumVal();
  3.                 $('#tcajax').val(montosx);
  4.                 var montosz = $('.sumar_montoz').sumVal();
  5.                 $('#tcajaz').val(montosz);
  6.                
  7.                 $('#tcaja').val(parseFloat(montosz)+parseFloat(montosx));
  8.                 $('#montoZ').val(parseFloat($('#montorvz').val())+parseFloat($('#montoriz').val()));               
  9.                
  10.                 var dmf = 0, dc = 0;
  11.                 dmf = ((parseFloat($('#montorvz').val() || 0)+parseFloat($('#montoriz').val() || 0)) - (parseFloat($('#mdevz').val() || 0)+parseFloat($('#mdeviz').val() || 0)) - parseFloat($('#tvale').val() || 0));
  12.                 dc =  (parseFloat($('#tcaja').val()) -  parseFloat($('#tvale').val()));
  13.                 $('#dmq').val(dmf.toFixed(2));
  14.                 $('#dc').val(dc.toFixed(2));
  15.                 if (Math.abs(dmf)>5){
  16.                     $('#alertdmq').val('1');}
  17.                     else{
  18.                         $('#alertdmq').val('0');
  19.                     }
  20.                 if (Math.abs(dc)>5){
  21.                     $('#alertdc').val('1');}
  22.                     else{
  23.                         $('#alertdc').val('0');
  24.                     }
  25.                 });

para hacer unos calculos de Diferencias entre lo vendido y lo cobrado etc... pero resulta que no siempre estos se ejecutan, es decir los campos donde quedan los resultados quedan VACIOS NaN o no se actualizan (porque nose) entonces eso obliga a que los usuarios se paseen por los input para que los rsultados se actualizen.

Mi pregunta seria, existe una forma de que SIEMPRE se ejecuten dichos scripts sin atarlo a un evento?

es una mala practica? o existe un mejor modo?
  #2 (permalink)  
Antiguo 16/04/2014, 16:56
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ejecutar un Script sin ningun Evento

Podrías incluir el código en una función anónima autoejecutable, la cual no depende de la ejecución de un evento para que suceda, sin embargo, el problema está en saber en qué momento debe ejecutarse, pues este tipo de funciones solamente se ejecutan luego de la carga de la ventana, mas no después. Podrías ejecutar la función cada X segundos o minutos, pero como tendrías que realizar peticiones constantes al servidor, este se ralentizaría luego de N peticiones, por lo que mejor sería que lo hagas utilizando la tecnología de WebSocket.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 17/04/2014, 08:08
Avatar de chichote
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Santiago - Chile
Mensajes: 1.868
Antigüedad: 19 años, 4 meses
Puntos: 145
Respuesta: Ejecutar un Script sin ningun Evento

si es que entiendo bien, quieres reaccionar frente a las respuestas de tu ajax. Si te das cuenta estas utilizando el evento "success" del metodo ajax, existen otras respuestas que son posibles de manipular, como por ejemplo complete, error, send, stop, etc. puedes revisarlas aca
https://api.jquery.com/category/ajax...vent-handlers/

Entonces, si existe un error, mediante el evento error podrás disparar la acción que quieras, por ejemplo volver a ejecutar la peticion ajax, o lanzar un mensaje al usuario, o en definitiva lo que se te ocurra.

Saludos
__________________
http://chicho.ninja yiaaaa
  #4 (permalink)  
Antiguo 24/04/2014, 10:28
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Ejecutar un Script sin ningun Evento

Bueno me di cuenta que hacer "SIEMPRE" un evento me traeria como muchos problemas, chichote no supe trabajar con los eventos de $ajax, lo que busco (aun lo hago) es saber que estatus tiene esa consulta, porque tengo ocaciones donde la ejecuto (envio una peticion) y pueden pasar hasta 10 mins en aparecer el resultado (entonces nose si la peticion no llego, o la consulta se tardo en ejecutar), es decir busco saber donde viene el error y porque.

Pero resulta que otras veces si se ejecuta de inmediato...

Ahora con las Sumas automaticas cambie el evento
Código Javascript:
Ver original
  1. $('#corte_caja').delegate('input[type=text]', 'blur', function () {

a

Código Javascript:
Ver original
  1. $('#corte_caja').keyup( function () {

de tal manera siempre sumara sin importar si salen o no del campo (blur)
  #5 (permalink)  
Antiguo 24/04/2014, 10:55
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Ejecutar un Script sin ningun Evento

Las llamadas jquery ajax tienen un atributo "timeout" que es el tiempo maximo que debe tardar la llamada ajax antes de ser obligada a abortar. Cuando se aborta, se llama al evento error. El uso de ambos sirve para ese tipo de cosas.
  #6 (permalink)  
Antiguo 24/04/2014, 12:38
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Ejecutar un Script sin ningun Evento

Cita:
Iniciado por marlanga Ver Mensaje
Las llamadas jquery ajax tienen un atributo "timeout" que es el tiempo maximo que debe tardar la llamada ajax antes de ser obligada a abortar. Cuando se aborta, se llama al evento error. El uso de ambos sirve para ese tipo de cosas.
Como puedo setear ese Atributo? yo modifique el codigo asi:

Código Javascript:
Ver original
  1. $( "#fecha1" ).blur(function() {
  2.             if ($(this).val()!=null){
  3.                 var fecha = $('#fecha1').val().split("/");
  4.                 $.ajax({
  5.                     type: 'post',
  6.                     url: 'ventas.php',
  7.                     data: "dia="+fecha[0]+"&mes="+fecha[1]+"&ano="+fecha[2],
  8.                     dataType: 'json',
  9.                     success: function(data)
  10.                     {
  11.                         var Facturas = data[0];
  12.                         var Devoluciones = data[1];
  13.                         var Facturado = data[2];
  14.                         $('#tvale').val(Facturado);
  15.                         },
  16.                         error: function()
  17.                         {
  18.                         alert( "Ocurrió un Error al Consultar las Ventas, Intentelo nuevamente." );}
  19.                     });
  20.                 }
  21.                 else{
  22.                     alert('El campo Fecha debe tener una Fecha Válida');
  23.                 }
  24.             });

pero jamas me sale el mensaje y el tiempo de repuesta sigue siendo largo (ocasionalmente)

Etiquetas: evento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:56.