Foros del Web » Programando para Internet » Javascript »

Problemas con Llamada a Función en Javascript Y Ajax

Estas en el tema de Problemas con Llamada a Función en Javascript Y Ajax en el foro de Javascript en Foros del Web. Hola Amigos como estan? Tengo un Problema con el siguiente codigo que explico a continuación que por rezones de Hard(Cargador Malo, Me tengo que conseguir ...
  #1 (permalink)  
Antiguo 17/08/2012, 07:27
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación Problemas con Llamada a Función en Javascript Y Ajax

Hola Amigos como estan? Tengo un Problema con el siguiente codigo que explico a continuación que por rezones de Hard(Cargador Malo, Me tengo que conseguir uno un rato para Trabajar un Rato" xD) no he podido solucionar

bueno la explicación....

Tengo el Siguiente Función.. (Esta es cortita para ejemplificar...)

function eliminar(){
if (document.form2.codielim.value==""){
document.form2.codielim.focus();
alert("Debe Ingresar Datos.");
ok=false;
}
else if(document.form2.codielim.value != ""){
if (confirm("¿Seguro que Deseas Eliminar?")) {
eliminar_producto();
totalizar();
alert("REALIZA TODO PERFECTO");//PERO SI SACO ALERT NO FUNCIONA
//ESTO ES LO QUE ME INTERESA, HACERLO FUNCIONAR SIN EL ALERT, ME DA LA IMPRESION QUE PRODUCE UN TIPO DE QUIEBRE..
}
else {
alert("Cancelado")
}
}
}


La funcion Eliminar es la Siguiente...

function eliminar_otra_cosa(){
orden_fact=document.form2.ord.value;
produ_fact=document.form2.codielim.value;

accion="archivos_transaccionales/frm_eliminar_producto_fact.php?orden_fact=" + orden_fact + "&produ_fact=" + produ_fact;

loadPag(accion,"grilla");
}

//loadPag es la siguiente función... El Php funciona perfecto me elimina y me actualiza la grilla con alert o sin el.


function loadPag(url, contenedor){
var pag = false;
if(window.XMLHttpRequest){
pag = new XMLHttpRequest();
}else{
if(window.ActiveXObject){ // pero si es IE
try{
pag = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){ // en caso que sea una versión antigua
try{
pag = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}else{
return false;
}
}
pag.onreadystatechange=function(){ // función de respuesta
loadURL(pag, contenedor);
}
pag.open('GET', url, true) // asignamos los métodos open y send
pag.send(null)
}


y por ultimo lo q necesito es que la función totalizar() se ejecute porque toma el valor de loadpage de una grilla que hice que hace todo perfecto, solo que con el alert toma el valor nuevo pero sin alert hay que presionar el boton 2 vceces por ejemplo o crear otro boton para crear el totalizar() aparte , en resumen no actualiza el valor con la primera funcion...

function totalizar() {
//alert("Revisar");
document.getElementById("desc_orden").value=parseI nt(document.getElementById("totabono").value

valo1=parseInt(document.getElementById("desc_orden ").value)*parseFloat(document.getElementById("cant _desc").value);

document.getElementById("desc_aplicado").value=val o1;

document.getElementById("desc_orden").value=Math.r ound(parseInt(document.getElementById("desc_orden" ).value)-valo1);

document.getElementById("impuesto_iva").value=Math .round(parseFloat((document.getElementById("desc_o rden").value)*0.19));

document.getElementById("total_bruto").value=Math. round((parseFloat(document.getElementById("desc_or den").value))+(parseFloat(document.getElementById( "impuesto_iva").value)));

}
}


Por ultmo para que le quede mas claro..
yo voy a borrar un item que me cuesta 100000, lo elimina todo perfecto independiente si el alert esta o no, el problema es que como se elimina el item que cuesta 100000, el input actualizado deberia quedar en 0, pero ahi esta el problema que con el alert como que produce un quiebre y me actualiza el valor, pero sin el alert no hace nada hasta que apreto el boton 2 veces o pongo el alert

espero me puedan ayudar, porq con lo poco que lo he visto, "sin cargador" no puedo estar sin pensar en comko hacerlo, saludos amigos

GRACIAS...
  #2 (permalink)  
Antiguo 17/08/2012, 08:37
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Problemas con Llamada a Función en Javascript Y Ajax

Lo que sucede es que cuando tu usas ajax este corre en otro hilo diferente, es decir que no espera que termine el ajax para que comienza tu otra funcion que viene siendo el totalizar lo mejor seria es que cuando en tu ajax te devuelva un status = 200 y un readyState = 4 y despues que ejecutes la funcion loadURL(pag, contenedor); recien deberías incluir tu función totalizar.

Ejemplo de como debería quedar tu código

Código Javascript:
Ver original
  1. function eliminar(){
  2.     if (document.form2.codielim.value==""){
  3.         document.form2.codielim.focus();
  4.         alert("Debe Ingresar Datos.");
  5.         ok=false;
  6.     }
  7.     else if(document.form2.codielim.value != ""){
  8.         if (confirm("¿Seguro que Deseas Eliminar?")) {
  9.             eliminar_producto();   
  10.         }
  11.         else {
  12.             alert("Cancelado")
  13.         }
  14.     }
  15. }
  16. function eliminar_otra_cosa(){
  17.     orden_fact=document.form2.ord.value;
  18.     produ_fact=document.form2.codielim.value;
  19.  
  20.     accion="archivos_transaccionales/frm_eliminar_producto_fact.php?orden_fact=" + orden_fact + "&produ_fact=" + produ_fact;
  21.  
  22.     loadPag(accion,"grilla");
  23. }
  24. function loadPag(url, contenedor){
  25.     var pag = false;
  26.     if(window.XMLHttpRequest){
  27.         pag = new XMLHttpRequest();
  28.     }else{
  29.         if(window.ActiveXObject){ // pero si es IE
  30.             try{
  31.                 pag = new ActiveXObject("Msxml2.XMLHTTP");
  32.             }catch(e){ // en caso que sea una versión antigua
  33.                 try{
  34.                     pag = new ActiveXObject("Microsoft.XMLHTTP");
  35.                 }catch(e){}
  36.             }
  37.         }else{
  38.             return false;
  39.         }
  40.     }
  41.     pag.onreadystatechange=function(){ // función de respuesta
  42.         loadURL(pag, contenedor);
  43.         totalizar();
  44.         alert("REALIZA TODO PERFECTO");
  45.     }
  46.     pag.open('GET', url, true) // asignamos los métodos open y send
  47.     pag.send(null)
  48. }
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 17/08/2012, 08:39
 
Fecha de Ingreso: enero-2012
Ubicación: Caracas
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 21
Respuesta: Problemas con Llamada a Función en Javascript Y Ajax

tu problema es que ajax es asincrono,

debes llamar a la funcion totalizar() en la funcion de respuesta
Código Javascript:
Ver original
  1. pag.onreadystatechange=function(){ // función de respuesta
  2.      loadURL(pag, contenedor);
  3.      totalizar();
  4. }

la razon por la que funciona cuando sacas el alert es porque estas haciendo un stop de ejecucion, el ajax responde y se ejecuta totalizar() correctamente.

....por favor cuando muestres tanto codigo usa los "highlight" que proporciona el foro...XD

Etiquetas: ajax, funcion
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 08:31.