Autor Tema: Ajax en segundo plano XMLHttpRequest onreadystatechange responseText CU01212F  (Leído 2933 veces)

VictorDevelop

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Buenos dias. Tengo un problema con el ejercicio CU01212F del curso básico de programación web con Ajax.

Mediante alerts he visto que status coge el valor 404,no encontrado,y me gustaria saber por que y cómo lo arreglo.

Este es el código html:

Código: [Seleccionar]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Alta Usarios</title>
    <script type="text/javascript">

        function UsuarioExistente(nombre)
        {
            //alert("Dentro de la funcion");
            var xmlhttp;
            var nombreRecibido = nombre;
            var contenidoMostrar = "";

            //Valor del label de respuesta
            var valorLabelRespuesta = document.getElementById("UsuarioExiste");
            var respuestaExisteMostrar = "";


            //Si no se le ha pasado ningun valor
            if (nombreRecibido.length == 0)
            {
                document.getElementById("UsuarioExiste").innerHTML = "";
                return;
            }

            xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function ()
            {
                //alert("Antes del If que comprueba respuesta ReadyStateVale=>"+xmlhttp.readyState+"Y Status:"+xmlhttp.status);
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                {
                    alert("Dentro del if");

                    nombreRecibido = xmlhttp.responseText.split;

                    for ($i = 0; $i < nombreRecibido.length; $i++)
                    {
                        alert("DentroDelfor"+nombreRecibido[i]);
                    }
                }
                if (xmlhttp.status == 404)
                {
                    alert("Error=>" + Error);
                    return;
                }
                alert("Despues del If que comprueba respuesta ReadyStateVale=>" + xmlhttp.readyState + "Y Status:" + xmlhttp.status);

            }
            var paramentros = 'nombreUsuario' + encodeURIComponent(nombreRecibido);
            xmlhttp.open('POST', 'altaUsuarios.php'); // Método post y url invocada
            xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // Establecer cabeceras de petición
            xmlhttp.send(paramentros); // Envio de parámetros usando POST
        }
               
    </script>
</head>
<body>
    <h1>Alta Usarios</h1>
    <form  method="">
        <label style="padding-right:20px;">Usuario</label>
        <input name="nombreUsuario" onBlur="UsuarioExistente(this.value)"/>
        <label name="UsuarioExiste"></label>
        <br />
        <label style="padding-right:15px;">Nombre</label>
        <input name="nombre"/>
        <br />
        <label style="padding-right:5px;">Apellidos</label>
        <input name="apellidos" />
        <input type="submit" value="Enviar"/>
    </form>
</body>
</html>

Y este el pequeño fichero php:
Código: [Seleccionar]
<?php
//Nombres alojados
$nombres[0]="Jose";
$nombres[1]="Fernando";
$nombres[2]="Juan";
$msg="";
$nombreRecibido=$_POST["nombreUsuario"];
echo
"DentroDealtausuarios.php";
$existeUsuario=false;

for(
$i=0;$i<count($nombres);$i++)
{
    if(
$nombres[$i]==$nombreRecibido)
    {
        
$msg="El usuario ".$nombres[$i]."Ya existe";
        
$existeUsuario=true;

    }else
    {
        
$msg="Usuario ".$nombres[$i]."esta disponible";
    }
}
echo 
$msg;
?>


Alguna idea?

Saludos.
« Última modificación: 22 de Junio 2017, 17:55 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ejercicio curso Ajax Entrega nº12 del curso
« Respuesta #1 en: 30 de Mayo 2017, 01:17 »
Buenas VictorDevelop.

Lo primero recomendarte leer el siguiente post, donde encontrarás las normas básicas de como publicar en el foro, donde está explicado como incluir el código correctamente en tus mensajes...

https://www.aprenderaprogramar.com/foros/index.php?topic=1460.msg7784#msg7784

El archivo php lo tienes mal planteado, de la forma que lo tienes, si introducimos "Jose" devolvería que el usuario está disponible, ya que la primera vez que se recorre el bucle si habrá coincidencia pero como el bucle se seguirá ejecutando en la siguientes  pasadas del bucle no se cumplirá esa coincidencia y $msg dirá que el nombre está disponible.

Este sería el códiog php retocado:
Código: [Seleccionar]
<?php
    
//Nombres alojados
    
$nombres[0]="Jose";
    
$nombres[1]="Fernando";
    
$nombres[2]="Juan";
    
$msg="";
    
$nombreRecibido=$_POST["nombreUsuario"];
    
$existeUsuario=false;

    for(
$i=0;$i<count($nombres);$i++)
    {
        if(
$nombres[$i]==$nombreRecibido) {
            
$existeUsuario=true;
        } 
    }
    if(
$existeUsuario == true) {
       
$msg="El usuario ".$nombreRecibido." ya existe";
    } else {
        
$msg="Usuario ".$nombreRecibido." esta disponible";
    }
    echo 
$msg;
?>

Y el código del archivo html también habría cosas que cambiar. En primer lugar, haces varias veces lo siguiente:

Código: [Seleccionar]
document.getElementById("UsuarioExiste");cuando en tu código no existe ningún elemento que tenga como id "UsuarioExiste".

Tu función recibe un parámetro llamado nombre que luego asignas a una variable cuando no haría falta esto último, estarías ocupando en memoria dos veces lo mismo pero con distinto nombre, esto no es un error, pero se puede mejorar.

Dentro del siguiente if...
Código: [Seleccionar]
nombreRecibido = xmlhttp.responseText.split;No necesitas crear ningún array, puesto que lo que se recibirá será una frase que dice si está o no está disponible el nombre enviado.

En la siguiente línea de código:
Código: [Seleccionar]
var paramentros = 'nombreUsuario' + encodeURIComponent(nombreRecibido);Te faltaría añadir un signo igual(=) después de 'nombreUsuario',

Y aquí el código html sin errores y funcionando:
Código: [Seleccionar]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Alta Usarios</title>
    <script type="text/javascript">

        function UsuarioExistente(nombre)
        {
            var xmlhttp;
            var respuestaConsulta = '';

            //Valor del label de respuesta
            var valorLabelRespuesta = document.getElementById("UsuarioExiste"); // no existe ningun elemento con este id.

            //Si no se le ha pasado ningun valor
            if (nombre.length == 0) {
                document.getElementById("UsuarioExiste").innerHTML = "";
                return;
            }

            xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    respuestaConsulta = xmlhttp.responseText;
                    valorLabelRespuesta.innerHTML = respuestaConsulta;
                }
                if (xmlhttp.status == 404) {
                    alert("Error=>" + Error);
                    return;
                }

            }
            var paramentros = 'nombreUsuario=' + encodeURIComponent(nombre);
            xmlhttp.open('POST', 'altaUsuarios.php'); // Método post y url invocada
            xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // Establecer cabeceras de petición
            xmlhttp.send(paramentros); // Envio de parámetros usando POST
        }
               
    </script>
</head>
<body>
    <h1>Alta Usarios</h1>
    <form action="">
        <label style="padding-right:20px;">Usuario</label>
        <input name="nombreUsuario" onBlur="UsuarioExistente(this.value)"/>
        <label name="UsuarioExiste" id="UsuarioExiste"></label>
        <br />
        <label style="padding-right:15px;">Nombre</label>
        <input name="nombre"/>
        <br />
        <label style="padding-right:5px;">Apellidos</label>
        <input name="apellidos" />
        <input type="submit" value="Enviar"/>
    </form>
</body>
</html>


Saludos. ;D


« Última modificación: 30 de Mayo 2017, 01:20 por pedro,, »

VictorDevelop

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ajax. Duda ejercicio CU01212F
« Respuesta #2 en: 30 de Mayo 2017, 13:01 »
Muchas gracias por tan completa respuesta.
Mirare las normas para compartir codigo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".