Foros del Web » Programando para Internet » Javascript »

Problema con Ajax Nativo Javascript y funciones.

Estas en el tema de Problema con Ajax Nativo Javascript y funciones. en el foro de Javascript en Foros del Web. Hola a todos. Tengo declarado mi objetoAjax nativo. He declarado 2 funciones que las llamo cuando selecciono un valor de un <Select> COMBO1 con el ...
  #1 (permalink)  
Antiguo 24/10/2012, 11:59
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 8 años, 4 meses
Puntos: 12
Problema con Ajax Nativo Javascript y funciones.

Hola a todos.

Tengo declarado mi objetoAjax nativo.

He declarado 2 funciones que las llamo cuando selecciono un valor de un <Select> COMBO1 con el evento OnChange().


Funcion1:buscarSerie()
-Me sirve para llenar otro COMBO2, con el valor de este COMBO1 seleccionado.

Funcion2:buscarNumFacturas()
-Me sirve para retornar 2 valores y mostrarlo en una caja de texto, con el valor de este COMBO1 seleccionado.


PROBLEMA:
--------------
Hay veces en que nome muestra los valores de las series en su COMBO2.

Nose si sera por que cuando ejecuto las 2 funciones se hacen 2 llamadas ajax al mismo tiempo y hay un cruce..

-----------

Algun metodo para hacer 2 llamadas ajax a la vez? si este es el caso.


Código PHP:

<script language="JavaScript" type="text/javascript" ><!--src="ajax.js"> -->
function 
objetoAjax(){
    var 
xmlhttp=false;
    try{
        
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch(
e){
        try{
            
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }catch(
E) { xmlhttp=false; }
    }
    if (!
xmlhttp && typeof XMLHttpRequest!='undefined')
    { 
xmlhttp=new XMLHttpRequest(); }
    return 
xmlhttp;
}

function 
buscarNumFacturas(){    
    if (
document.forms[0].ven_core.value!=""){
        
ven_feem document.forms[0].ven_feem.value;
        
ven_core document.forms[0].ven_core.value;
        
ven_codo document.forms[0].ven_codo.value;
        
ven_seri document.forms[0].ven_seri.value;
        
ajax1 objetoAjax();
        
        
//alert("Hola");
        
        
ajax1.open("POST""lofa_numfacturas.php",true);
        
ajax1.onreadystatechange=function() {
    
          if (
ajax1.readyState == 4) {
            
numr =  eval("(" ajax1.responseText ")");
            
            
alert(numr.numerox+"-"+numr.numeroz);
            
          }
        }
        
ajax1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        
ajax1.send("&ven_codo="+ven_codo+"&ven_feem="+ven_feem+"&ven_core="+ven_core+                        "&ven_seri="+ven_seri+"&proceso=ajax");
    }
    return 
true;
    
//ajax2.send("&ven_feem="+ven_seri+"&proceso=ajax");
}

function 
buscarSerie() {
    
divResultado1 document.getElementById('ven_seri');
    
ven_codo document.forms[0].ven_codo.value;
    
    
ajax1 objetoAjax();
    
ajax1.open("POST""lofa_listaserie.php",true);
    
ajax1.onreadystatechange=function() {
      
//alert(ajax1.readyState);
      //alert("Aqui");
      
if (ajax1.readyState == 4) {
        
divResultado1.innerHTML ajax1.responseText;        
      }
    }
    
ajax1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    
ajax1.send("&ven_codo="+ven_codo+"&proceso=ajax");
}
</script> 
//Luego hago la llamada alas 2 funciones.

<select class=':required contract12 smedium' name="ven_codo" id="ven_codo" onchange="buscarSerie();buscarNumFacturas();">
  #2 (permalink)  
Antiguo 24/10/2012, 12:04
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 11 años, 2 meses
Puntos: 1532
Respuesta: Problema con Ajax Nativo Javascript y funciones.

realmente he visto muchos principiantes que sólo aplican (ajax1.readyState == 4) cuando deben de aplicar

((ajax1.readyState == 4) && (ajax1.status == 200))

corrija ese punto e intente de nuevo, consulte un manual de AJAX
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 24/10/2012, 13:07
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 8 años, 4 meses
Puntos: 12
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Esa no es la solucion...

Era evidente... que no!
  #4 (permalink)  
Antiguo 24/10/2012, 13:17
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 8 años, 9 meses
Puntos: 206
Respuesta: Problema con Ajax Nativo Javascript y funciones.

No debería de haber un cruce de llamadas, son independientes.

Prueba a poner a todas las variables, en su primera declaración, un VAR delante. Siempre. SI no lo pones, es probable que las variables se machaquen entre sí. Creo.
  #5 (permalink)  
Antiguo 24/10/2012, 13:43
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 11 años, 3 meses
Puntos: 1011
Respuesta: Problema con Ajax Nativo Javascript y funciones.

ten en cuenta lo que ya te han indicado, y no seas despectivos con usuarios que se toman la molestia por interesarse por tu problema, además prueba a usar el operador &&
Cita:
onchange="buscarSerie()&&buscarNumFacturas();"
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 24/10/2012, 14:10
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 8 años, 4 meses
Puntos: 12
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Hay que ser creativo para ntentar algo como esto.
onchange="buscarSerie()&&buscarNumFacturas();"

Nunca se me ubiera ocurrido, pero no sale.


Al final opte por hacerlo con Jquery.

Igual gracias a todos, me di cuenta que el ajax Nativo es limitado en ciertas cosas.
  #7 (permalink)  
Antiguo 24/10/2012, 14:15
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 11 años, 3 meses
Puntos: 1011
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Cita:
Iniciado por xpapachox Ver Mensaje

Al final opte por hacerlo con Jquery.

Igual gracias a todos, me di cuenta que el ajax Nativo es limitado en ciertas cosas.
sabes que jquery es una librería de javascript. esto significa que todos lo que puedes hacer con jquery, se puede hacer con javascript. pero no todo lo que puedes hacer con javascript, puedes hacerlo con jquery
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #8 (permalink)  
Antiguo 25/10/2012, 07:00
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 11 años, 2 meses
Puntos: 1532
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Cita:
Iniciado por xpapachox Ver Mensaje
Esa no es la solucion...

Era evidente... que no!
puede que no le resolviera del todo, pero así es como se debe aplicar ajax, primero me debo asegurar que el error no provenga de una mala aplicación de la técnica, si revisa incluso dentro del código del wrapper ajax de jquery notará que hace exactamente lo mismo, debido a que el HTTP status == 200 es lo que se considera dentro del protocolo como una petición exitosa.

además como ajax es asíncrono, si buscarNumFacturas(); debe de llamarse despues de obtener buscarSerie(); entonces debe ser llamado al obtener la respuesta, por lo que tienes que pasarlo como callback:

buscarSerie(function() {buscarNumFacturas();});

y quedaría así:

Código Javascript:
Ver original
  1. function buscarSerie(_callback) {
  2.     divResultado1 = document.getElementById('ven_seri');
  3.     ven_codo = document.forms[0].ven_codo.value;
  4.    
  5.     ajax1 = objetoAjax();
  6.     ajax1.open("POST", "lofa_listaserie.php",true);
  7.     ajax1.onreadystatechange=function() {
  8.       //alert(ajax1.readyState);
  9.       //alert("Aqui");
  10.       if ((ajax1.readyState == 4) && (ajax1.status == 200)) {
  11.         divResultado1.innerHTML = ajax1.responseText;
  12.         _callback(); //aqui se llama a la otra función
  13.       }
  14.     }
  15.     ajax1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  16.     ajax1.send("&ven_codo="+ven_codo+"&proceso=ajax");
  17. }
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 25/10/2012 a las 07:07
  #9 (permalink)  
Antiguo 25/10/2012, 07:30
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 8 años, 9 meses
Puntos: 206
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Apuesto mi karma a que el problema es el no haber puesto "var ajax1" dentro de las funciones, por lo que las llamadas ajax1 se están machacando la una a la otra.
Pero una vez más, fuí un ser incomprendido.
  #10 (permalink)  
Antiguo 25/10/2012, 11:03
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 11 años, 2 meses
Puntos: 1532
Respuesta: Problema con Ajax Nativo Javascript y funciones.

Cita:
Iniciado por marlanga Ver Mensaje
Apuesto mi karma a que el problema es el no haber puesto "var ajax1" dentro de las funciones, por lo que las llamadas ajax1 se están machacando la una a la otra.
Pero una vez más, fuí un ser incomprendido.
bueno, eso depende, hay navegadores que no te solicitan el var

y con respecto al nombre tienes parte de razón, siempre que el scope sea el mismo se sobre-escribe la variable, pero como lo hice yo, con el callback el 2do ajax no se crea sino después de la respuesta, por lo que intuyo no lo romperá.

bueno, no te voy a negar que no probé el código, utilicé mis conocimientos empíricos, por lo cual uno asume que el usuario lo prueba y comenta el error, así uno busca otra solución o encuentra el verdadero problema, ese es el feedback esperado en el foro

el comentario de @xpapachox no me afectó ni lo tomé personal, pero si ten en cuenta que queremos ayudarte, aún así no les guste mi forma de hacerlo , igual ayudo y espero que sigas adelante y espero verte no sólo preguntando sino aportando, saludos y éxito
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: ajax, funciones, nativo, php
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:12.