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

problema con AJAX, :(

Estas en el tema de problema con AJAX, :( en el foro de Frameworks JS en Foros del Web. Bueno, me he recién metido hoy con ajax por lo que no se mucho..pero tengo muchos problemas para arrancar un code, lo que quiero es ...
  #1 (permalink)  
Antiguo 12/10/2006, 12:27
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
problema con AJAX, :(

Bueno, me he recién metido hoy con ajax por lo que no se mucho..pero tengo muchos problemas para arrancar un code, lo que quiero es validar un usuario, y el procedimiento esta en 3 paginas.
A ver si alguien sabe decirme porque me falla el codigo, el problema esta en que no me devuelve ni Si ni No segun si la identificación és o no correcta, en FireFox no me funciona :S, el procedimiento que me hace es como si validara los datos pero me recarga la web a la inicial, como si iciera un Location() en php no se si me explico. Antes me funcionaba pero cambie algunas cosillas y no tengo narices de volver al estado en el que estaba en que, como minimo en IE me funcionaba :S. Las 3 paginas con su codigo:

login.php (aqui se rellena el formulario para ingresar como usuario)
Código:
<?php
if(!isset($_GET['admin']) && $_GET['admin'] != 'log')
{
	header("Location: ../../index.php");
}
?>
<script type="text/javascript" src="ajax.js"></script>
<div align="center">
	<strong>Identificació</strong>
	<br>
	<div id="error" align="center" style="color:#FF0000;"></div>
	<form method="post" onsubmit="validaradmin()" action="#">
		<div align="left">&nbsp;<strong>Usuari: </strong><input id="asunto" name="asunto" type="text" size="25" maxlength="30"><br>
		&nbsp;<strong>Contrasenya: </strong><input id="asunto" name="password" type="password" size="25" maxlength="25"></div>
		<input type="submit" value="Enviar">
		<input type="submit" value="Cancelar">
	</form>
</div>
ajax.js (el code de ajax)
Código:
function iniciar() {
    try {
        iniciar = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            iniciar = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            iniciar = false;
        }
    }
    if (!iniciar && typeof XMLHttpRequest!='undefined') {
       iniciar= new XMLHttpRequest();
    }
    return iniciar;
}

function validaradmin() {
    error = document.getElementById("error");
    pass = document.getElementById("asunto");
    user = document.getElementById("password");
    _objetus=iniciar() //crear objeto
    _values_send="user="+user+"&password="+pass //variables
    _URL_="Admin/Log/identificar.php?" //URL
    _objetus.open("POST",_URL_,true); //abrir procesador
    _objetus.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
	//cabeceras POST
    _objetus.send('&'+_values_send); //enviar variables
    _objetus.onreadystatechange=function() { //funcion controlador
        if (_objetus.readyState==4) //control de estados del proceso
        {
                 //si se da un status 200 (TERMINADO CON EXITO)
           if(_objetus.status==200)
            {
            	if(_objetus.responseText == 'No')
            	{
            		error.innerHTML = "Identificació incorrecte";
            	}
            	else
            	{
            		error.innerHTML = "Identificació correcte";
            	}
            }
        }
    }
}
identificar.php (esta parte se encarga de validar si el usuario existe o no y responder segun su existència)
Código:
<?php
include("../../conectar.php");
$query = mysql_query("SELECT * FROM admin WHERE admin='".sha1(md5($_POST['user']))."' and pass='".sha1(md5($_POST['password']))."'");
$num = mysql_num_rows($query);
if($num <= 0)
{
	echo "No";
}
else
{
	echo "Si";
}
mysql_close($link);
?>
Gracias de adelanto
  #2 (permalink)  
Antiguo 12/10/2006, 14:27
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Bueno he conseguido mejoras, la verdad es que ahora ya me sale si el user es correcto o no, pero lamentosamente solo una vez, o sea..le clicas a enviar, te dice si estas identificado o no..pero si le vuelves a clicar te carga la pagina desde 0 como si la abrieras de nuevo y no ejecuta el script.. a algien se le ocurre porque?
PD: Sigue sin funcionar en FireFox pero si en Internet Explorer
Los codes son:

identificar.php (mismo que antes, no lo pongo)
login.php(alguna pequeña modificación):
Código:
<?php
if(!isset($_GET['admin']) && $_GET['admin'] != 'log')
{
	header("Location: ../../index.php");
}
?>
<script type="text/javascript" src="ajax.js"></script>
<div align="center">
	<strong>Identificació</strong>
	<br>
	<div id="error" align="center" style="color:#FF0000;"></div>
	<form method="POST" onSubmit="javascript:validaradmin(); return false">
		<div align="left">&nbsp;<strong>Usuari: </strong><input id="asunto" name="asunto" type="text" size="25" maxlength="30"><br>
		&nbsp;<strong>Contrasenya: </strong><input id="asunto" name="password" type="password" size="25" maxlength="25"></div>
		<input type="submit" value="Enviar">
		<input type="submit" value="Cancelar">
	</form>
</div>
ajax.js(el mas modificado de todos..pero sigue sin funcionar en FF y me pasa lo que comenté)
Código:
function iniciar() {
    try {
        iniciar = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            iniciar = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            iniciar = false;
        }
    }
    if (!iniciar && typeof XMLHttpRequest!='undefined') {
       iniciar= new XMLHttpRequest();
    }
    return iniciar;
}

function validaradmin() {
    var error, user, pass;
    error = document.getElementById("error");
    user = document.getElementById("asunto").value;
    pass = document.getElementById("password").value;
    ajax=iniciar();
    ajax.open("POST", "Admin/Log/identificar.php",true);
    ajax.onreadystatechange=function() {
    	if (ajax.readyState==4) {
    		if(ajax.status==200)
    		{
    			if(ajax.responseText == 'No')
    			{
    				error.innerHTML = "Identificació incorrecte";
    			}
    			else
    			{
    				error.innerHTML = "Identificació correcte";
    			}
    		}
     	}
    }  
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send("user="+user+"&password="+pass);
    return;
}
Muchas gracias de adelanto, si consigo arreglarlo avisaré, si alguien sabe como ayudarme me hará un favor.
  #3 (permalink)  
Antiguo 12/10/2006, 14:47
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....................


y si haces


alert(_objetus.responseText)


que te sale?



connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 12/10/2006, 15:04
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
eso donde? en donde pongo lo del texto?¿? si en login.php le meto esto asi:

antes:
<form method="POST" onSubmit="javascript:validaradmin(); return false">

ahora:
<form method="POST" action="javascript:validaradmin();">
Pues solo me lo hace una vez..pero no me refresca si esta identificado o no..me explico..si meto un user identificado la 1a vez me dice: identificado correctamente, pero a la k le cambio un numero me sigue diciendo identificado correctamente y yo se que ese user no existe.
Otra pregunta lo que me dijiste hara que funcione en Firefox? :S

Gracias por tu ayuda :D

PD: prové el alert, solo me saca una ventana diciendome No la primera vez solo.. sigo igual que antes ya que quiero que me salga en texto no con ventana. un saludo
  #5 (permalink)  
Antiguo 12/10/2006, 15:12
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............


intenta ponerlo en este orden

function validaradmin() {
var error, user, pass;
error = document.getElementById("error");
user = document.getElementById("asunto").value;
pass = document.getElementById("password").value;
ajax=iniciar();
ajax.open("POST", "Admin/Log/identificar.php",true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send("user="+user+"&password="+pass);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
if(ajax.status==200)
{
if(ajax.responseText == 'No')
{
error.innerHTML = "Identificació incorrecte";
}
else
{
error.innerHTML = "Identificació correcte";
}
}
}
}
}



connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 12/10/2006, 15:18
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Lo he probado, y sigue igual, si esta en form action, no actualiza, y si esta de la otra manera con el onsubmit.. me sigue haciendo el primero..y si le das a enviar otra vez se recarga la pagina entera... juer, no lo consigo :( antes lo he conseguido pero no recurdo como porque cambie algo para que me funcionara en Firefox..de todas formas sigue sin funcionar en firefox ni bien.. alguna idea mas?
  #7 (permalink)  
Antiguo 12/10/2006, 17:58
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
casi casi...esta solucionado..ya me funciona en Firefox y en explorer..pero, solo me deja mandar los datos una vez, le he peusto para que me devuelva el apss y user que le he escrito y me lo devuelve pero todo el rato el de la primera vez, de hecho en la 2nda ya ni tan solo carga, porque puede ser? los codes ya modificados y como estan hasta ahora:

identificar.php(el mismo, solo que ahora uso el get en lugar dle post)
login.php(un peli modificado):
Código:
<?php
if(!isset($_GET['admin']) && $_GET['admin'] != 'log')
{
	header("Location: ../../index.php");
}
?>
<html>
   <head>
      <title>Ajax: Ejemplo - Env&iacute;o de datos por m&eacute;todo POST</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="ajax.js"></script>
	</head>
<body>
<div align="center">
	<strong>Identificació</strong>
	<br>

	<div id="error" align="center" style="color:#FF0000;"></div>
	<form>
		<div align="left">&nbsp;<strong>Usuari: </strong><input id="asunto" type="text" size="25" maxlength="30"><br>
		&nbsp;<strong>Contrasenya: </strong><input id="password" type="password" size="25" maxlength="25"></div>
		<input type="button" value="Enviar" onClick="validaradmin(); return false">
		<input type="button" value="Cancelar">
	</form>
</div>
</body>
</html>
ajax.js(el mas modificado de todos para que me rule todo bien):
Código:
function iniciar() {
    try {
    	iniciar = new XMLHttpRequest();
    } catch (e) {
           try {
            	iniciar = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (E) {
            	try
            	{
            		    iniciar = new ActiveXObject("Microsoft.XMLHTTP");		
            	}
            	catch(e)
            	{
                iniciar = false;
                }
            }
   }
   return iniciar;
}

function validaradmin() {
    	var error, user, pass;
	error = document.getElementById("error");
	user = document.getElementById("asunto").value;
    	pass = document.getElementById("password").value;
    	ajax=iniciar();
    	ajax.open("GET", "Admin/Log/identificar.php?user="+user+"&password="+pass,true);
    	ajax.onreadystatechange=function() {
    		if (ajax.readyState==4) {
    			if(ajax.status==200)
		    	{
		    		if(ajax.responseText == 'No')
		    		{
		   			error.innerHTML = "Identificació incorrecte<br>"+user+"<br>"+pass;
		   			updatepage;
		   			
		   		}
		    		else
		    		{
		    			error.innerHTML = "Identificació correcte";
		    		}
   			}
    	 	}
    	}
    	ajax.send(null);
}
PD: creo que el fallo esta en login.php a la hora de cargar el script pero no estoy muy seguro y no se que hacer, espero que a alguien se le ocurra algo, un saludo!
  #8 (permalink)  
Antiguo 13/10/2006, 05:41
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 2 meses
Puntos: 0
Intenta declarar la variable ajax dentro de la función antes de crear el objeto. Si no lo haces así estás manejando la misma variable y reasignandola con lo que puede darte fallos.

var ajax=iniciar();


Si sigue sin ir prueba a que ajax sea en realidad un array

lo generas fuera de las funciones.

var ajax= new Array;

y luego para llamarlo cada vez que lo crees hazlo en un nuevo lugar del array.

var n= ajax.length;

ajax[n]=iniciar();

y pasa a manejar ajax[n] cuando manejabas ajax. De esta forma los objetos no deberían molestarse uno a otro.
  #9 (permalink)  
Antiguo 13/10/2006, 06:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
okhuerta, ya itnenté lo que me dijiste, el code me queda asi:
Código:
var ajax= new Array;
function validaradmin(form) {
        var error, user, pass;
	error = document.getElementById("error");
	user = document.getElementById("asunto").value;
    	pass = document.getElementById("password").value;
    	var n= ajax.length;
	ajax[n]=iniciar();
    	ajax[n].open("GET", "Admin/Log/identificar.php?user="+user+"&password="+pass,true);
    	ajax[n].onreadystatechange=function() {
    		if (ajax[n].readyState==4) {
    			if(ajax[n].status==200)
		    	{
		    		if(ajax[n].responseText == 'No')
		    		{
		   			error.innerHTML = "Identificació incorrecte<br>"+user+"<br>"+pass;		   			
		   		}
		    		else
		    		{
		    			error.innerHTML = "Identificació correcte";
		    		}
   			}
    	 	}
    	}
    	ajax[n].send(null);
}
La cosa esta en que de esta forma cuando le doy a enviar me passa directamente a index.php y no me funciona como deberia :S:S, o sea te cuento, el problema que me da es que la primera vez me identifica bien..pero a la que le doy otra vez a click cuando me devuelve user y pass..entonces me vuelve al index.php.. ME falla tanto con array como con sin array, por lo que no estoy seguro de si es problema de esto o es que me falta algun return por ahi o algo :S:S. estoy perdido porque es lu ultimo que me falla..poder clicar mas de una vez en enviar y que si cambio el pass me cambie, se que se puede hacer pero no lo consigo.. a ver si alguien es capaz..gracias por tu ayuda!!!

PD: te he agregado al msn para poder charlar sobre el tema si no te parece mal, un saludo
PD2: Si no explico bien mi problema avisen y vuelvo a explicar porque es un poco amiguo
  #10 (permalink)  
Antiguo 13/10/2006, 18:16
 
Fecha de Ingreso: febrero-2004
Mensajes: 20
Antigüedad: 20 años, 10 meses
Puntos: 0
Bueno ya solcione el tema definitvamente, lo de qeu no actualizara era cosa de como iniciaba el AJAX, por lo que lo he modificado y todo rula perfectamente, aqui esta el ajax.js modificado:
Código:
function iniciar() {
    try {
    	aopen = new XMLHttpRequest();
    } catch (e) {
           try {
            	aopen = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (E) {
            	try
            	{
            		aopen = new ActiveXObject("Microsoft.XMLHTTP");		
            	}
            	catch(e)
            	{
                	aopen = false;
                }
            }
   }
   return aopen;
}

function validaradmin(forma) {
	var ajax=iniciar();
	var error, user, pass;
	user = "";
	pass = "";
	error = document.getElementById("ero");
	user = document.getElementById("asunto").value;
	pass = document.getElementById("passw").value;
	ajax.open("GET", "Admin/Log/identificar.php?user="+user+"&password="+pass, true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
	    		if(ajax.status==200)
		    	{
		    		if(ajax.responseText == 'No')
		    		{
		   			error.innerHTML = "Identificació incorrecte";
		   		}
		    		else
		    		{
		    			error.innerHTML = "Identificació correcte";
		    		}
	   		}
		}	
	}
	ajax.send(null);      	  
}
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 04:15.