Foros del Web » Programando para Internet » Javascript » Frameworks JS »

AJAX solo funciona una ves?

Estas en el tema de AJAX solo funciona una ves? en el foro de Frameworks JS en Foros del Web. Hola use en ejemplo de un post publicado aqui y me funciona normal... el ejemplo es simple.. doy click en un boton y me me ...

  #1 (permalink)  
Antiguo 09/09/2005, 09:45
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
AJAX solo funciona una ves?

Hola use en ejemplo de un post publicado aqui y me funciona normal... el ejemplo es simple.. doy click en un boton y me me devuelve el IP ... bueno.. si doy otra ves click .,. ya no funciona....

Falta algo.. aca les paso el codigo
Código PHP:
<script language="javascript"  type="text/javascript">
//crear el objeto
function objetus() {
        try {
                
objetus = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (
e) {
                try {
                        
objetus= new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
E) {
                        
objetusfalse;
                }
        }
        if (!
objetus && typeof XMLHttpRequest!='undefined') {
                
objetus = new XMLHttpRequest();
        }
        return 
objetus
}

function 
enviar()
{
    
    
_objetus=objetus()
    
_values_send="funcion=ip";
    
_URL_="dar_ip.php?"
    
_objetus.open("GET",_URL_+_values_send,true);        
    
_objetus.onreadystatechange=function() {              
        if (
_objetus.readyState==4)
        {               
            
window.alert(_objetus.responseText);
        }
    }   
    
_objetus.send(null);
}
</script> 
Código HTML:
<input type='button' value='Ver IP' Onclick="javascript: enviar();"> 


porque ????????????



  #2 (permalink)  
Antiguo 09/09/2005, 10:55
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
mmm es verdad esto, en explorer me pasa con un script mio tambien. hago un request y solo se hace una vez, despues apreto el boton y nada..
  #3 (permalink)  
Antiguo 09/09/2005, 12:55
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading............


Bueno eso me pasaba en IExplorer si no ponia el javascript dentro de HEAD, intentalo así ponlo dentro de <head></head> y funcionará normal.

sinò

Código PHP:
function enviar()
{
    
    
_objetus=objetus()
    
_values_send="funcion=ip";
    
_URL_="dar_ip.php?"
    
_objetus.open("GET",_URL_+_values_send,true);        
    
_objetus.onreadystatechange=function() {              
        if (
_objetus.readyState==4)
        {               
            
window.alert(_objetus.responseText);
        }
    }   
    
_objetus.send(null);
return

connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 09/09/2005, 13:24
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Eso hago y no pasa nada

Sigue igual....
  #5 (permalink)  
Antiguo 09/09/2005, 14:17
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading........


entonces aumentale esto a tu codigo

Código PHP:
if (_objetus.readyState==4)
        {               
if(
_objetus.status==200)
{           
 
window.alert(_objetus.responseText);
}
else
{
 
window.alert(_objetus.status);
}
        } 

connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 09/09/2005, 14:21
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading...............


lo averigué!
debes ponerle return
al final de la funcion.


connection closed.
__________________

Maborak Technologies
  #7 (permalink)  
Antiguo 09/09/2005, 16:05
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
sigue sin funcionar....
  #8 (permalink)  
Antiguo 09/09/2005, 17:06
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
:( a ti te funciona?
  #9 (permalink)  
Antiguo 09/09/2005, 17:09
Avatar de programeitor  
Fecha de Ingreso: febrero-2005
Mensajes: 994
Antigüedad: 19 años, 10 meses
Puntos: 9
A ver si vale:
Código:
 
if (_objetus.readyState==4) 
{ 
window.alert(_objetus.responseText);
_objetus.readyState=0
}
  #10 (permalink)  
Antiguo 09/09/2005, 18:30
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
readonly PRInt32 readyState

The state of the request.


parece que esa propiedad es de solo lectura...
  #11 (permalink)  
Antiguo 10/09/2005, 04:14
Avatar de Mignola  
Fecha de Ingreso: noviembre-2002
Ubicación: Templo Shaolin
Mensajes: 167
Antigüedad: 22 años, 1 mes
Puntos: 1
Hola,

Prueba con esto:
Código HTML:
<script language="javascript"  type="text/javascript">
//funcion encargada de crear el objeto
function objetus() {
			try {
				client = window.XMLHttpRequest ? new XMLHttpRequest() :	new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) { 
				alert("Lo siento, tu navegador es una kk!"); 
			}
			return client;
}
//la funcion que hará el trabajo sucio
//esta funcion es la que llamamos en el evento ONCLICK de nuestro boton
function primer_tope(){

    //creamos el objeto
    var _objetus = new objetus();
    //cargamos una varible con las variables que vamos a enviar
    _values_send="funcion=pt"
    _URL_="proceso.php?"
	if (_objetus) {
			_objetus.open("GET",_URL_+"&"+_values_send,true);
				//una vez enviado los valores inmediatamente llamamos a la propiedad 
				//onreadystatechange
			_objetus.onreadystatechange=function() {
						//dentro de la funcion comprobamos el estado del proceso
						//si es 4 (terminado) pedimos lo que nos han mandado
				if (_objetus.readyState==4)        {
						//usamos la propiedad responseText para recibir en una cadena
						//lo que nos mandaron
					window.alert(_objetus.responseText);
					delete _objetus;
				}
			}
			//obligatorio .... luego explicarè el porque
			_objetus.send(null);
	}
}
</script>
<input type="button" name="visual" value="Pedir datos" class="boton" onclick="primer_tope();">


<!-- mas documento HTML --> 
  #12 (permalink)  
Antiguo 10/09/2005, 09:27
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Veo que lo nuevo aqui es delete _objetus;

no funciona... :(
  #13 (permalink)  
Antiguo 10/09/2005, 09:30
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
no, lo que hace es crear el objeto cada vez que se llama un request y luego se elimina obviamente.
pero creo que se podria simplificar al poner esta linea de codigo en la funcion primer_tope:

try {
client = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Lo siento, tu navegador es una kk!");
}

y luego hacer delete client;
  #14 (permalink)  
Antiguo 10/09/2005, 10:31
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Pero... ya ni el mensaje sale....
  #15 (permalink)  
Antiguo 11/09/2005, 21:14
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
No hay soluciones?
  #16 (permalink)  
Antiguo 12/09/2005, 11:33
 
Fecha de Ingreso: julio-2003
Mensajes: 21
Antigüedad: 21 años, 4 meses
Puntos: 0
Prueba con ésto:
Código PHP:
function objetus() {
    var 
objetus;
        try {
                
objetus = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (
e) {
                try {
                        
objetus= new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
E) {
                        
objetusfalse;
                }
        }
        if (!
objetus && typeof XMLHttpRequest!='undefined') {
                
objetus = new XMLHttpRequest();
        }
        return 
objetus;

Añadí la declaración de la variable objetus.
  #17 (permalink)  
Antiguo 12/09/2005, 11:46
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading..........


Es que en verdad es muy raro porque no te funciona. En el tutorial que hice los ejemplos de devolver parseado o no un XML funciona bien y es el mismo procedimiento que tu haces :S.


connection closed.
__________________

Maborak Technologies
  #18 (permalink)  
Antiguo 12/09/2005, 12:12
 
Fecha de Ingreso: julio-2003
Mensajes: 21
Antigüedad: 21 años, 4 meses
Puntos: 0
Pues yo también he probado los ejemplos de tu tutorial y me pasaba lo mismo.
En cambio si declaro la variable se crea como una variable local y no global, y no se guarda el estado.
  #19 (permalink)  
Antiguo 12/09/2005, 12:24
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Solucionado

Listo esta solucionado...


Solo faltaba esto:

Al crear el objeto no se declaro la variable.. asi que debe tener esto

Código PHP:

function objetus() { 
    [
B][SIZE=5]var objetus; [/SIZE] [/B

        try { 
                
objetus = new ActiveXObject("Msxml2.XMLHTTP"); 
        } catch (
e) { 
                try { 
                        
objetus= new ActiveXObject("Microsoft.XMLHTTP"); 
                } catch (
E) { 
                        
objetusfalse
                } 
        } 
        if (!
objetus && typeof XMLHttpRequest!='undefined') { 
                
objetus = new XMLHttpRequest(); 
        } 
        return 
objetus

Luego... en la funcion no se elimino el objeto...


Código PHP:

function enviar(ctaemail)
{
    
_objetus=objetus()
    
_values_send="cuenta="+cta+"&email="+email;
    
_URL_="recordar_clave.asp?"
    
_objetus.open("GET",_URL_+_values_send,true);        
    
_objetus.onreadystatechange=function() {              
        if (
_objetus.readyState==4)
        {               
            if(
_objetus.status==200
                {            
                    
window.alert(_objetus.responseText);                    
                } 
                else 
                { 
                    
window.alert(_objetus.status); 
                }
    [
B][SIZE=5]delete _objetus;[/SIZE][/B]    
    }                  
    }   
    
_objetus.send(null);




JEJEJE hasta que por fin.. ahoa si me va de maravilla... ya me funciona FLASH y AJAX normal... es fenomenal esto :XD

Gracias.


  #20 (permalink)  
Antiguo 12/09/2005, 14:32
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
pero no entiendo, cual es la diferencia con crear el objeto y guardarlo en una variable global? de esta forma se esta ejecutando codigo inecesario al crear el objeto cada vez que hay un request.

por cierto, el delete _objetus no es necesario y no es posible hacerlo ya que no se pueden eliminar variables declaradas con var (http://developer.mozilla.org/en/docs...or#Description)

bueno hice esto y sigue sin funcionar la mierda esta.

otro detalle, ese script que pusiste de ejemplo es muy pobre, nunca vas a alertar el resultado recibido.. deberias hacerlo mas estandar el codigo entonces cuando haces un request podrias especificar que funcion se encargaria de recibir los datos, pero que paso? cuando termine de hacer el request elimine el objeto entonces cuando el estado cambie el objeto no va a existir......

bueno solucionado, creo el objeto cada vez q hago un request, pero lo almaceno en una variable global.

Última edición por SiR.CARAJ0DIDA; 12/09/2005 a las 16:09
  #21 (permalink)  
Antiguo 12/09/2005, 19:02
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
mmm.. me apresure mucho.... no funciona.. me sale el mensaje varias veces si.. pero no envia datos.. me devuelve lo mismo... por ejemplo si envio 1 me da la letra A , si envio 2 me nevia la letra B... bueno en mi caso... envio 1 y me sale A.. luego doy click nuevamnete pero envio 2 y me sale otra vez A... y simempre A.. tengo que cerrar la ventana para que salga B.... no sale
  #22 (permalink)  
Antiguo 12/09/2005, 20:07
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
es como hiciste, creas una funcion para instanciar al objeto y lo guardas en una variable global. luego cada vez q haces un request llamas a la funcion que crea el objeto nuevamente.

lol... ahora tampoco funciona, anda perfecto en opera y firefox, en ie me sale "error de sistema - 234363464"

Última edición por SiR.CARAJ0DIDA; 13/09/2005 a las 10:10
  #23 (permalink)  
Antiguo 17/09/2005, 13:23
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Tenemos que resolver el problema.. la gran cantidad de Pc's llevan IE... asi que busquemos algo seguro.. para ser usado... tiene que ser multiplataforma...
  #24 (permalink)  
Antiguo 19/09/2005, 10:15
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
Estuve viendo y el problema que tengo en ie es solo con el metodo POST, en otros sitios los ejemplos que dan de POST en ie usan el objeto Microsoft.XMLHTTP y no Msxml2.XMLHTTP. Este ultimo se usa para GET, yo probe y ahora me funciona, aunque toque tantas cosas que realmente nose cual era la causa del problema.

Ademas para el POST lo uso de esta forma:
Código HTML:
http_request.abort();
http_request.open("POST", destino, true);
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", URI.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(URI);
donde URI es la cadena con los datos a enviar (query string) codificadas con el metodo encodeURIComponent() o escape(), que por cierto estuve viendo y no codifican igual.
__________________
Internet Explorer SuckS
Download FireFox
  #25 (permalink)  
Antiguo 23/09/2005, 11:04
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 10 meses
Puntos: 45
Hola a todos!
pues esto de ajax me parecio muy interesante, asi que me puse hacer algunas prubas e invetigar un poco.
use el ejemplo de nuestro amigo MaBoRaK pero igual tenia los mismos errores en IE
busque informacion por ahi.
Consegui que ya no me de error con este codigo, todo funciono perfecto!
Código PHP:
<script language="javascript"  type="text/javascript">
function 
getHTTPObject() {
  var 
xmlhttp;
  
/*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      
xmlhttp = new XMLHttpRequest();
    } catch (
e) {
      
xmlhttp false;
    }
  }
  return 
xmlhttp;
}

 
//la funcion que hará el trabajo sucio
 //esta funcion es la que llamamos en el evento ONCLICK de nuestro boton
 
function primer_tope()
 {

     
//creamos el objeto
 //  var  _objetus=new objetus()
   
var _objetus getHTTPObject()
     
//cargamos una varible con las variables que vamos a enviar
     
_values_send="funcion=pt"
     
_URL_="proceso.php?"
     
_objetus.open("GET",_URL_+"&"+_values_send,true);
        
//una vez enviado los valores inmediatamente llamamos a la propiedad 
         //onreadystatechange
     
_objetus.onreadystatechange=function() {
                 
//dentro de la funcion comprobamos el estado del proceso
                 //si es 4 (terminado) pedimos lo que nos han mandado
         
if (_objetus.readyState==4)
         {
                 
//usamos la propiedad responseText para recibir en una cadena
                 //lo que nos mandaron
             
window.alert(_objetus.responseText);
             
//_objetus.readyState=0
         
}
     }
     
//obligatorio .... luego explicarè el porque
     
_objetus.send(null);
 }
 
</script> 
No ser por que nuestro amigo MaBoRaK recomendo la primera opcion y no la segunda, en su manual, eso no me quedo muy claro .
En lo personal prefiero la segunda, por que el código que esta dentro de estos simbolos /**/ que son comentarios para los demas navegadores pero no para IE, que si los procesa, usando la compilación condicional para evitar errores en navegadores antiguos de IE.
Mayor informacion encuentran en http://www.programacion.com/html/art...tw_js_recarga/
Saludos a todos!!
Seguire investigando :)
  #26 (permalink)  
Antiguo 23/09/2005, 12:24
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Desacuerdo Creo que la cosa esta peor....

ERROR


Bueno .. a mi me sale esto...



Que cosa esta mal?.. en mi caso el documento se llama procesar.asp y en ese archivo solo hay esto.

procesar.asp
Código HTML:
<% response.Write("Hola XD") %> 
Haber que pasa
  #27 (permalink)  
Antiguo 23/09/2005, 12:27
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 10 meses
Puntos: 45
Hola richardinj
puedes poner tu codigo, para probarlo en mi pc
Saludos!
  #28 (permalink)  
Antiguo 23/09/2005, 12:43
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
Creo que fue porque me confundi al esscribir procesar.asp . habia puesto procears.asp.. bueno ya lo repare... ahora no procesa nada, ni envia... ahora tengo esto

En mi código antiguo si me funciona, pero no dos veces seguidas .. es decir .. en procesar.asp coloco "Hola XD 2" y al dar click en el boton me arroja de mensaje "Hola XD".. es decir el anterior.. osea no se cambia ..

en otro ejemplo puse que envie por el metofo GET dos variables.. cuenta y email....

inicio.asp
Código HTML:
<a href="javascript: enviar('uno','[email protected]');"> 
Código HTML:
function enviar(cta, email)
{
    _objetus=objetus()
    _values_send="cuenta="+cta+"&email="+email;
    _URL_="recordar_clave.asp?"
    _objetus.open("GET",_URL_+_values_send,true);     
...
.
.
.
.
.
con el codigo anterior si me funciona bien pero como lo repito , solo una ves...
cuando uso este codigo nuevo que me diste Genetix... me sale un mensaje que dice "no hay ni michi"

de esto

procesar.asp
Código HTML:
<%
cuenta=request.QueryString("cuenta")
email=request.QueryString("email")

if cuenta="" or email="" then
   response.Write("no hay ni michi")
else
   response.Write("chevere")
end if

%> 
  #29 (permalink)  
Antiguo 23/09/2005, 12:48
Avatar de richardinj  
Fecha de Ingreso: enero-2005
Ubicación: Ciber Espacio
Mensajes: 2.180
Antigüedad: 19 años, 10 meses
Puntos: 11
aca esta

Este es el codigo en genral el que actualmente uso y no me funciona.... bueno solo una ves...

inicio.asp
Código PHP:

<script language="javascript"  type="text/javascript">
//crear el objeto

function objetus() {
    var 
objetus;
        try {
                
objetus = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (
e) {
                try {
                        
objetus= new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
E) {
                        
objetusfalse;
                }
        }
        if (!
objetus && typeof XMLHttpRequest!='undefined') {
                
objetus = new XMLHttpRequest();
        }
        return 
objetus
}


function 
enviar(ctaemail)
{
    
_objetus=objetus()
    
_values_send="cuenta="+cta+"&email="+email;
    
_URL_="procesar.asp?"
    
_objetus.open("GET",_URL_+_values_send,true);        
    
_objetus.onreadystatechange=function() {              
        if (
_objetus.readyState==4)
        {               
            if(
_objetus.status==200
                {            
                    
window.alert(_objetus.responseText);                    
                } 
                else 
                { 
                    
window.alert(_objetus.status); 
                }
                
delete _objetus;
        }                  
    }   
    
_objetus.send(null);
}


</script>


<a href="javascript: enviar('uno','[email protected]');"> 




procesar.asp
Código PHP:
<%
cuenta=request.QueryString("cuenta")
email=request.QueryString("email")

if 
cuenta="" or email="" then
   response
.Write("no hay ni michi")
else
   
response.Write("chevere")
end if

%> 

Siempre me sale el mensaje "no hay ni michi" y si lo cambio por "no hay ni michi 22222" me sale nuevamnete el mensaje "no hay ni michi"...

Última edición por richardinj; 23/09/2005 a las 12:50 Razón: Fe Erratas
  #30 (permalink)  
Antiguo 23/09/2005, 12:54
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading...........


No programé en ASP pero :D
no deberia ser == en vez de =?
Código PHP:
<%
cuenta=request.QueryString("cuenta")
email=request.QueryString("email")

if 
cuenta=="" or email=="" then
   response
.Write("no hay ni michi")
else
   
response.Write("chevere")
end if

%> 


connection closed.
__________________

Maborak Technologies
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 02:11.