Autor Tema: Métodos open, send XMLHttpRequest Ajax propiedad onreadystatechange CU01209F  (Leído 2635 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes.

A continuación expongo una posible solución de los ejercicios de la entrega CU01209F del curso Ajax desde cero.

Citar
EJERCICIO Nº1                                                                                               

Crea un archivo denominado respuesta.php que contenga el código necesario para devolver lo siguiente:

a) Si se recibe el parámetro nombre con valor alberto, la frase “Alberto está realizando un curso de programación”.

b) Si se recibe el parámetro nombre con valor juan, la frase “Juan está realizando prácticas de ingeniería de sistemas”

c) Si el parámetro viene vacío o no existe, la frase “No hay información. Revise la petición”.

En un archivo denominado peticion.html crea una casilla de texto que pida un nombre y un botón chequear, de modo que al pulsarse el botón chequear se produzca una petición vía Ajax para obtener los resultados contenidos en el archivo respuesta.php. Dichos resultados deberán mostrarse en una ventana de alerta JavaScript cada vez que se pulse el botón chequear.

Código HTML:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo Ajax</title>
<script type="text/javascript">

var xmlhttp = new XMLHttpRequest();

function mostrarMensaje(){
var nombre = document.getElementById('nombre').value;

xmlhttp.open("GET", "CU01209F(01).php?nombre="+nombre);
xmlhttp.send();

xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
alert(xmlhttp.responseText);
}
}

}

</script>
</head>
<body>
<form action="">
Nombre: <input type="text" name="nombre" id="nombre"><br>
<input type="button" value="chequear" onclick="mostrarMensaje();">
</form>
</body>
</html>

Código PHP:

Código: [Seleccionar]
<?php 

$alberto "Alberto está realizando un curso de programación";
$juan "Juan está realizando prácticas de ingeniería de sistemas";
$porDefinicion "No hay información. Revise la petición";

$nombre $_REQUEST['nombre'];

if($nombre=="alberto"){
echo $alberto;
}else if($nombre=="juan"){
echo $juan;
}else{
echo $porDefinicion;
}

?>


Me surge una duda: ¿Por qué así funciona?:

Código: [Seleccionar]
<script type="text/javascript">

var xmlhttp = new XMLHttpRequest();

function mostrarMensaje(){
var nombre = document.getElementById('nombre').value;

xmlhttp.open("GET", "CU01209F(01).php?nombre="+nombre);
xmlhttp.send();

xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
alert(xmlhttp.responseText);
}
}

}

</script>

y así no:

Código: [Seleccionar]
<script type="text/javascript">

var xmlhttp = new XMLHttpRequest();

function mostrarMensaje(){
var nombre = document.getElementById('nombre').value;

xmlhttp.open("GET", "CU01209F(01).php?nombre="+nombre);
xmlhttp.send();


if(xmlhttp.readyState==4 && xmlhttp.status==200){
alert(xmlhttp.responseText);
}


}

</script>

¿Por qué es obligatoria utilizar la propiedad "onreadystatechange" del objeto "XMLHttpRequest"? ¿No basta sólo con tal de utilizar una de las propiedades: "readyState" o "status"?

Y otra cuestión: ¿cómo van ordenadas las sentencias en el uso del objeto "XMLHttpRequest"? Yo creo que primero se tiene que abrir con: "XMLHttpRequest.open()", luego enviarlo con: "XMLHttpRequest.send()" y luego ya invocar las demás propiedades, como por ejemplo, "XMLHttpRequest.responseText()". Pero en los ejemplos del curso, por lo menos hasta la entrega CU01209F, los métodos "open()" y "send()" aparacen al final del script.

Citar
EJERCICIO Nº2                                                                                               

Crea un archivo denominado respuesta1.txt que contenga varias líneas de texto y súbelo al servidor. Haz lo mismo para los archivos respuesta2.txt y respuesta3.txt. A continuación crea un archivo html donde usando Ajax y tres botones denominados “Ver archivo 1”, “Ver archivo 2” y “Ver archivo 3” puedas visualizar el contenido de cada archivo en un div preparado para ello encima del cual aparecerá “Contenido del archivo solicitado es:”.

Código HTML:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo Ajax</title>
<script type="text/javascript">

var xmlhttp = new XMLHttpRequest();

function mostrarTexto(texto){
xmlhttp.open("GET", texto);
xmlhttp.send();

xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var nodo = document.getElementById('contenedor');
nodo.innerHTML = xmlhttp.responseText;
}
}

}


</script>
</head>
<body style="text-align: center;">
<button onclick="mostrarTexto('respuesta1.txt');">Ver archivo 1</button>
<button onclick="mostrarTexto('respuesta2.txt');">Ver archivo 2</button>
<button onclick="mostrarTexto('respuesta3.txt');">Ver archivo 3</button>
<h1>El contendio del archivo solicitado es:</h1>
<div id="contenedor"></div>
</body>
</html>

Los archivos "respuesta1.txt, respuesta2.txt y respuesta3.txt" tienen los siguientes contenidos:

respuesta1.txt

Citar
Hola
Esto es el contendio del
primer texto

respuesta2.txt

Citar
Hola
Esto es el contendio del
segundo texto

respuesta3.txt

Citar
Hola
Esto es el contendio del
tercer texto


Gracias.
« Última modificación: 21 de Junio 2016, 21:06 por César Krall »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01209F Métodos open, send de XMLHttpRequest en Ajax
« Respuesta #1 en: 07 de Junio 2016, 22:49 »
Hola dimiste.

Los ejercicios están bien resueltos.

En cuanto al código que dices que porqué no funciona, hazte esta pregunta.

¿Qué valor tiene readyState en el momento en que se lee la línea donde está?

La propiedad onreadystatechange es llamada cada vez que cambia el valor de la propiedad readyState de ahí su necesidad. Porque si no la usamos, el if que planteas se leerá una sola vez recogiendo el valor que tenga readyState en ese momento, en este caso el valor sería 1.


Saludos. ;D
« Última modificación: 08 de Junio 2016, 01:33 por pedro,, »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01209F Métodos open, send de XMLHttpRequest en Ajax
« Respuesta #2 en: 08 de Junio 2016, 09:13 »
Buenos días, Pedro.

Gracias por corregirme el ejercicio y por tu tiempo. Tienes razón, no funciona porque cuando se lee la instrucción aún tiene valor "1". Tenía que haberlo visto :)

Saludos.

 

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".