Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: javaquery en 10 de Diciembre 2016, 00:08

Título: Ajax, PhP y JavaScript. Juego Adivina el número con xml y Json Código ejecutable
Publicado por: javaquery en 10 de Diciembre 2016, 00:08
Buenas tengo que hacer este ejercicio:

1   En un proyecto PHP en NetBeans de nombre DAW_M06_PHP, crea dentro una nueva carpeta de nombre de nombre DAW_M06_T6_NUMERO. Dentro crea un nuevo documento  HTML con el nombre “aciertaNumero.html” , un JavaScript  un PHP con el nombre “aciertaNumeroXML.php” que contendrá el código PHP adjunto, y un nuevo PHP aciertaNumeroJSON.php que deberás programar.

2   Programa en  “aciertaNumero.js” las funciones necesarias para que al clicar encima de #inicioXML:

2.1     se envíe una petición AJAX a aciertaNumeroXML.php con el parámetro: inicio=si


Aqui los codigos


CODIGO aciertaNumero.html


Código: [Seleccionar]
<body>
        <div id="inicioXML">INICIO XML</div>
        <div id="inicioJSON">INICIO JSON</div>
        <input type="text" id="numero" />
        <div id="checkAjaxXML"> CHECK AJAX XML</div>
        <div id="checkAjaxJSON"> CHECK AJAX JSON</div>
        <div id="encontrado"></div>
        <div id="mensaje"></div>
    </body>



CODIGO aciertaNumeroXML.php

Código: [Seleccionar]
<?php
session_start
();
@
header("Content-type: text/xml");
$xml '<?xml version="1.0" encoding="utf-8"?>
' . "\n";
$xml .= '<resp>' . "\n";  //inciamos el XML

if(isset($_GET['inicio'])){     //se ha indicado iniciar un nuevo juego
        $numeroAleatorio=rand(0,10);//seleccionamos un numero aleatorio entre 0 y 10
        $_SESSION['numeroOculto'] = $numeroAleatorio;
               
               
        $xml .= "<inicio>".$_SESSION['numeroOculto']."</inicio>" . "\n";//retornamos el numero generado
}else{
    $numeroUsuario = $_GET['numero'];
    $numeroOculto=$_SESSION['numeroOculto'];
   
    if($numeroUsuario > $numeroOculto ){
        $xml .= "<encontrado>no</encontrado>" . "\n";
        $xml .= "<mensaje>Has introducido un valor demasiado alto"."s</mensaje>" . "\n";
    }else {
        if($numeroUsuario < $numeroOculto ){
            $xml .= "<encontrado>no</encontrado>" . "\n";
            $xml .= "<mensaje>Has introducido un valor demasiado bajo"."</mensaje>" . "\n";
        }else{
              $xml .= "<encontrado>si</encontrado>" . "\n";
            $xml .= "<mensaje>Exacto!</mensaje>" . "\n";
        }
       
    }
}
//finalizamos la estructura XML
$xml .= '</resp>' . "\n";

//insertamos la respuesta XML
echo($xml);
?>



Código que he hecho de aciertaNumero.js

Código: [Seleccionar]
function consultaAjax() {

    var xmlHttp = new XMLHttpRequest();
   
    var si = document.getElementById("inicioXML").value;

    var urlDestino = "aciertaNumeroXML.php?inicio="+si;
    xmlHttp.open("GET", urlDestino, true);

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlHttp.onreadystatechange = function(){
   
    if(xmlHttp.readyState ==4){
        funcionResp(xmlHttp);
    }
};

xmlHttp.send(null);
}

Título: Re:Duda ejercicio
Publicado por: pedro,, en 11 de Diciembre 2016, 02:18
Holq javimf.


Si tu duda es e punto 2.1, la siguiente línea debería quedar así:

Código: [Seleccionar]
var urlDestino = "aciertaNumeroXML.php?inicio=si";
Saludos.  ;D
Título: Re:Duda ejercicio
Publicado por: javaquery en 11 de Diciembre 2016, 12:55
Hola
Lo he probado pero en el inspector de cofigo me dice funcionResp is not defined, ¿esta funcion donde tengo que definirla?
Título: Re:Duda ejercicio
Publicado por: pedro,, en 11 de Diciembre 2016, 13:15
¿Podrías poner el enunciado entero?

Porque en realidad no se que pretendes que haga la función "funcionResp()".

En este condicional
Código: [Seleccionar]
[if(xmlHttp.readyState ==4){
        funcionResp(xmlHttp);
    }/code]

Deberías recoger aprovechar para coger la respuesta que te devuelva tu código php.

[code]contenidosRecibidos = xmlhttp.responseText;

y luego actuar con ella como creas conveniente, como te dije, si puedes aclarar mejor que se debe hacer con ella, será más fácil ayudarte, porque el enunciado solo dice que enviar por ajax, pero no que hacer con lo que podamos recibir.


Saludos. ;D
Título: Re:Duda ejercicio
Publicado por: javaquery en 11 de Diciembre 2016, 13:24
Este es el enunciado entero del ejercicio, los ejercicios se dividen por partes por ejemplo  2  , 2.1 , 2.2 ..ect

1   En un proyecto PHP en NetBeans de nombre DAW_M06_PHP, crea dentro una nueva carpeta de nombre de nombre DAW_M06_T6_NUMERO. Dentro crea un nuevo documento  HTML con el nombre “aciertaNumero.html” , un JavaScript  un PHP con el nombre “aciertaNumeroXML.php” que contendrá el código PHP adjunto, y un nuevo PHP aciertaNumeroJSON.php que deberás programar.

2   Programa en  “aciertaNumero.js” las funciones necesarias para que al clicar encima de #inicioXML:
2.1     se envíe una petición AJAX a aciertaNumeroXML.php con el parámetro: inicio=si
2.2   extrae el número aleatório de la respuesta generada por PHP y muéstralo por consola.
2.3   Muestra un mensaje en el DIV #mensaje avisando que se ha generado un nuevo número.

3   Programa en  “aciertaNumero.js” las funciones necesarias para que al clicar encima de #checkAjaxXML:
3.1     se envíe una petición AJAX a aciertaNumeroXML.php con el parámetro: numero=valor introducido dentro del input #numero
3.2   extrae de la respuesta generada por PHP, si se ha encontrado el valor y el mensaje retornado por el servidor.
3.3   Muestra el mensaje en el DIV #mensaje y el valor de encontrado dentro del DIV #encontrado.



4   Crea un archivo de nombre aciertaNumeroJSON.php que realice las mismas funcioes que aciertaNumeroXML.php pero retornando una estructura JSON y añade las funciones  Javascript para realicar las consultas de inicio y check correspondientes. Es decir:
4.1    al clicar encima del DIV #inicioJSON se debe enviar una petición AJAX a aciertaNumeroJSON.php  para que genere un número aleatório y lo retorne dentro de una estructura JSON. Al recibir la respuesta se ha de mostrar el número por consola y mostrar un mensaje en #mensaje avisando que se ha generado un nuevo número.

4.2   Al clicar encima del DIV #checkAjaxJSON  se debe enviar una petición AJAX a aciertaNumeroJSON.php  recibiendo el valor del input  #numero para retornar en formato JSON  los parámetros “encontrado” y “mensaje” indicando si se ha encontrado y un mensaje que se deberán mostrar en los DIV #encontrado y #mensaje



5   Añade un marcador con un máximo de fallos que vaya modificándose cada vez que el usuario falle y muestre un mensaje si se han realizado todos los fallos o todos los aciertos. Para controlar los fallos puedes utilizar una variable global JavaScript.

 

Un saludo y gracias
Título: Re:Duda ejercicio
Publicado por: pedro,, en 11 de Diciembre 2016, 16:49
Para el punto 2, el código JavaScript quedaría de la siguiente forma:

Código: [Seleccionar]
window.onload = function() {
document.getElementById('inicioXML').addEventListener('click', consultaAjax);
}

function consultaAjax() {
var xmlHttp = new XMLHttpRequest();   
var urlDestino = "aciertaNumeroXML.php?inicio=si";
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
console.log(xmlHttp.responseText);
document.getElementById('mensaje').innerHTML = 'Se ha generado un nuevo número.';
}
};
xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

y si lo que quieres es que muestre por consola solo el número y no las etiquetas xml cambia el if por este:

Código: [Seleccionar]
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseXML;
var numero = respuesta.getElementsByTagName('inicio')[0].textContent;
console.log(numero);
document.getElementById('mensaje').innerHTML = 'Se ha generado un nuevo número.';
}

El código del archivo aciertaNumeroXML.php es el que pusiste?, lo digo porque tiene algún error, además de que da igual de que envíes 'inicio=si' o igual a cualquier otro texto.

Saludos.
Título: Re:Duda ejercicio
Publicado por: javaquery en 11 de Diciembre 2016, 17:48
He preguntado lo del codigo php que tiene errores aver que me dicen

un saludo :D
Título: Re:Duda ejercicio
Publicado por: pedro,, en 11 de Diciembre 2016, 18:15
Bueno, el único error era que faltaba una comilla en la cuarta línea después del "=".

Y ahora probando el código, veo que en el php lo único que importa es que exista "$_GET['inicio']" para poner en marcha el juego.

Así que no hagas mucho caso sobre mi comentario sobre el error, que te lo dije antes de probar el código.

Saludos. ;D
Título: Re:Duda ejercicio
Publicado por: javaquery en 11 de Diciembre 2016, 22:31
Me dijeron que el codigo en principio esta bien, otra cosa en el inspector me da un error
TypeError: document.getElementById(...) is null

Que tengo que hacer para que me muestre el numero introducido, porque en el inspector no lo veo, yo lo relleno y hago clic en INICIO XML, pero no me lo muestra
Título: Re:Duda ejercicio
Publicado por: pedro,, en 12 de Diciembre 2016, 00:25
Te dejo los códigos donde yo estoy haciendo las pruebas y me dices.

aciertaNumero.html
Código: [Seleccionar]
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
<script src="aciertaNumero.js"></script>
</head>

<body>
        <div id="inicioXML">INICIO XML</div>
        <div id="inicioJSON">INICIO JSON</div>
        <input type="text" id="numero" />
        <div id="checkAjaxXML"> CHECK AJAX XML</div>
        <div id="checkAjaxJSON"> CHECK AJAX JSON</div>
        <div id="encontrado"></div>
        <div id="mensaje"></div>
    </body>

</html>

aciertaNumero.js
Código: [Seleccionar]
window.onload = function() {
document.getElementById('inicioXML').addEventListener('click', consultaAjax);
document.getElementById('checkAjaxXML').addEventListener('click', checkAjaxXML);
}

function consultaAjax() {
var xmlHttp = new XMLHttpRequest();   
var urlDestino = "aciertaNumeroXML.php?inicio=hola";
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseXML;
console.log(respuesta);
var numero = respuesta.getElementsByTagName('inicio')[0].textContent;
console.log(numero);
document.getElementById('mensaje').innerHTML = 'Se ha generado un nuevo número.';
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

aciertaNumeroXML.php
Código: [Seleccionar]
<?php
session_start
();
@
header("Content-type: text/xml");
$xml '<?xml version="1.0" encoding="utf-8"?>
' . "\n";
$xml .= '<resp>' . "\n";  //inciamos el XML

if(isset($_GET['inicio'])){     //se ha indicado iniciar un nuevo juego
        $numeroAleatorio=rand(0,10);//seleccionamos un numero aleatorio entre 0 y 10
        $_SESSION['numeroOculto'] = $numeroAleatorio;
               
               
        $xml .= "<inicio>".$_SESSION['numeroOculto']."</inicio>" . "\n";//retornamos el numero generado
}else{
    $numeroUsuario = $_GET['numero'];
    $numeroOculto=$_SESSION['numeroOculto'];
   
    if($numeroUsuario > $numeroOculto ){
        $xml .= "<encontrado>no</encontrado>" . "\n";
        $xml .= "<mensaje>Has introducido un valor demasiado alto"."s</mensaje>" . "\n";
    }else {
        if($numeroUsuario < $numeroOculto ){
            $xml .= "<encontrado>no</encontrado>" . "\n";
            $xml .= "<mensaje>Has introducido un valor demasiado bajo"."</mensaje>" . "\n";
        }else{
              $xml .= "<encontrado>si</encontrado>" . "\n";
            $xml .= "<mensaje>Exacto!</mensaje>" . "\n";
        }
       
    }
}
//finalizamos la estructura XML
$xml .= '</resp>' . "\n";

//insertamos la respuesta XML
echo($xml);
?>
Título: Re:Duda ejercicio
Publicado por: javaquery en 12 de Diciembre 2016, 11:05
Hola, luego lo miro cuando llegue a casa
 Un saludo

thanks ;D
Título: Re:Duda ejercicio
Publicado por: javaquery en 12 de Diciembre 2016, 19:45
Hola,  esta linea es la que me da error en el codigo.
document.getElementById('checkAjaxXML').addEventListener('click', checkAjaxXML);
Aunque logico ya que no esta definida la variable checkAjaxXML


El profesor dijo que el php esta bien y dijo esto:"Importante es que inicialmente se envíe la petición ajax con GET con el parámetro inicio=si, para que entre en el primer if del PHP, genere el número aleatorio y lo guarde en la variable de SESSION"

Mi HTML lo tengo asi , difiere con el tuyo en que esta la llamada a la funcion consultaAjax()
<body>
        <div>TODO write content</div>
        <div id="inicioXML" onclick="consultaAjax();">INICIO XML</div>
        <div id="inicioJSON">INICIO JSON</div>
        <input type="text" id="numero" />
        <div id="checkAjaxXML"> CHECK AJAX XML</div>
        <div id="checkAjaxJSON"> CHECK AJAX JSON</div>
        <div id="encontrado"></div>
        <div id="mensaje"></div>
    </body>
Entonces en principio el ejercicio 2 esta completo,¿no?
Título: Re:Duda ejercicio
Publicado por: pedro,, en 12 de Diciembre 2016, 20:33
El error, como dices es lógico al no coincidir los id.

Si prefieres usar el "onclick" directamente en el html, con que no uses el "window.onload" será suficiente.

El apartado 2 está completo.
Título: Re:Duda ejercicio
Publicado por: javaquery en 14 de Diciembre 2016, 23:51
Buenas
¿como seria el ejercicio 3?
un saludo ;D
Título: Re:Duda ejercicio
Publicado por: pedro,, en 15 de Diciembre 2016, 00:07
Lo intentaste?  :o

Lo tenía del otro día pero no se porqué se me olvido ponerlo en el código de javascript.
Te dejo la función que hay que añadir nada mas, y solo tienes que llamarla.

Código: [Seleccionar]
function checkAjaxXML() {
var xmlHttp = new XMLHttpRequest();   
var numPropuesto = document.getElementById('numero').value;
var urlDestino = 'aciertaNumeroXML.php?numero=' + numPropuesto;
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseXML;
console.log(respuesta);
document.getElementById('encontrado').innerHTML = respuesta.querySelector('encontrado').textContent;
document.getElementById('mensaje').innerHTML = respuesta.querySelector('mensaje').textContent;
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

Saludos. ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 15 de Diciembre 2016, 00:39
tenia hecho el 3.1 pero el 3.2 no entendia muy bien que habia que hacer, voy a ver si me pongo con el 4, si tengo duda te pregunto.

Gracias
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 16 de Diciembre 2016, 12:35
Buenas
Estoy con el ejercicio 4, se supone que como pide una peticion AJAX a aciertaNumeroJSON.php  para que genere un numero aleatorio , esta parte ?es igual que la del primer ejercicio hasta antes de la funcion con if? y lo que dice que lo retorne dentro dentro de una estrcutura JSON, eso cambia.
Por ahora llevo esto hecho
Código: [Seleccionar]

window.onload = function () {
    document.getElementById("incioXML").addEventListener("click", consultaAjax);
    document.getElementById("checkAjaxXML").addEventListener('click', checkAjaxXML);
    document.getElementById("inicioJSON").addEventListener("click", inicioJSON);

}

function inicioJSON(){
   
    var xmlHttp= new XMLHttpRequest();
    var urlDestino = "aciertaNumeroJSON.php)";
   

estoy viendo los apuntes y no entiendo muy bien lo de recibir la respuesta en formato JSON
un saludo

Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 16 de Diciembre 2016, 13:45
Hola javimf

Yo lo que entiendo en el punto 4 es que necesitas un nuevo archivo php que haga lo mismo que aciertaNumeroXML.php, pero en este caso en vez de devolver algo en formato XML lo devuelva en formato JSON.

Podrías aprovechar el mismo código de aciertaNumeroXML.php para aciertaNumeroJSON.php y la parte final en vez de devolver el contnido de la variable $xml dejarlo así:
Código: [Seleccionar]
$xml = str_replace(array("\n", "\r", "\t"), '', $xml); 
  $xml = trim(str_replace('"', "'", $xml));
  $simpleXml = simplexml_load_string($xml);

echo(json_encode($simpleXml));


Luego la parte ajax sería muy parecida a la usada en el anterior punto del ejercicio, pero cuando recojas los datos de la consulta, tendrás que usar responseText en vez de responseXML.

Prueba y nos cuenta.

Saludos. ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 16 de Diciembre 2016, 19:59
En el js he hecho esto,  he hecho lo mismo que en el anterior cambiando por el responseText
Código: [Seleccionar]
function inicioJSON() {

    var xmlHttp = new XMLHttpRequest();
    var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroJSON.php?numero =' + numPropuesto;
    xmlHttp.onreadystatechange = function () {

        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {

            var respuesta = xmlHttp.responseText;
            console.log(respuesta);
            document.getElementById('mensaje').innerHTML = "Se ha generado un nuevo numero";
        }

    };

    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();
}


Cuando me dices que aproveche el codigo de aciertaNumeroXML.php para el aciertaNumeroJSON.php  y que cambie solo la parte final que devuelve la variable xml , aque parte te refieres
este es el codigo de aciertaNumeroXML.php
Código: [Seleccionar]
<?php

session_start
();
@
header("Content-type: text/xml");
$xml '<?xml version="1.0" encoding="utf-8"?>
' . "\n";
$xml .= '<resp>' . "\n";  //inciamos el XML

if(isset($_GET['inicio'])){     //se ha indicado iniciar un nuevo juego
        $numeroAleatorio=rand(0,10);//seleccionamos un numero aleatorio entre 0 y 10
        $_SESSION['numeroOculto'] = $numeroAleatorio;
               
               
        $xml .= "<inicio>".$_SESSION['numeroOculto']."</inicio>" . "\n";//retornamos el numero generado
}else{
    $numeroUsuario = $_GET['numero'];
    $numeroOculto=$_SESSION['numeroOculto'];
   
    if($numeroUsuario > $numeroOculto ){
        $xml .= "<encontrado>no</encontrado>" . "\n";
        $xml .= "<mensaje>Has introducido un valor demasiado alto"."s</mensaje>" . "\n";
    }else {
        if($numeroUsuario < $numeroOculto ){
            $xml .= "<encontrado>no</encontrado>" . "\n";
            $xml .= "<mensaje>Has introducido un valor demasiado bajo"."</mensaje>" . "\n";
        }else{
              $xml .= "<encontrado>si</encontrado>" . "\n";
            $xml .= "<mensaje>Exacto!</mensaje>" . "\n";
        }
       
    }
}
//finalizamos la estructura XML
$xml .= '</resp>' . "\n";

//insertamos la respuesta XML
echo($xml);
?>

Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 16 de Diciembre 2016, 20:33
El archivo aciertaNumeroJSON.php quedaría así:
Código: [Seleccionar]
<?php
session_start
();
@
header("Content-type: text/xml");
$xml '<?xml version="1.0" encoding="utf-8"?>
' . "\n";
$xml .= '<resp>' . "\n";  //inciamos el XML

if(isset($_GET['inicio'])){     //se ha indicado iniciar un nuevo juego
        $numeroAleatorio=rand(0,10);//seleccionamos un numero aleatorio entre 0 y 10
        $_SESSION['numeroOculto'] = $numeroAleatorio;
               
               
        $xml .= "<inicio>".$_SESSION['numeroOculto']."</inicio>" . "\n";//retornamos el numero generado
}else{
    $numeroUsuario = $_GET['numero'];
    $numeroOculto=$_SESSION['numeroOculto'];
   
    if($numeroUsuario > $numeroOculto ){
        $xml .= "<encontrado>no</encontrado>" . "\n";
        $xml .= "<mensaje>Has introducido un valor demasiado alto"."s</mensaje>" . "\n";
    }else {
        if($numeroUsuario < $numeroOculto ){
            $xml .= "<encontrado>no</encontrado>" . "\n";
            $xml .= "<mensaje>Has introducido un valor demasiado bajo"."</mensaje>" . "\n";
        }else{
              $xml .= "<encontrado>si</encontrado>" . "\n";
            $xml .= "<mensaje>Exacto!</mensaje>" . "\n";
        }
       
    }
}
//finalizamos la estructura XML
  $xml .= '</resp>' . "\n";
  $xml = str_replace(array("\n", "\r", "\t"), '', $xml);    // removes newlines, returns and tabs
  $xml = trim(str_replace('"', "'", $xml)); // cambia comillas dobles por comillas simples si las hubiese
  $simpleXml = simplexml_load_string($xml); // crea un objeto xml de un string

echo(json_encode($simpleXml)); // crea un string con formato JSON
?>

Y en la función inicioJSON, al recibir un string de este estilo:
Código: [Seleccionar]
'{"inicio":"9"}'Lo mejor a mi gusto es convertirlo en un objeto JSON con la siguiente línea:
Código: [Seleccionar]
var obj = JSON.parse(respuesta);Y después mostrar su contenido por consola como en el ejercicio anterior, de la siguiente forma:
Código: [Seleccionar]
console.log("El número aleatorio que devuelve la consulta es: ", obj.inicio);
la función quedaría así:
Código: [Seleccionar]
function inicioJSON() {
var xmlHttp = new XMLHttpRequest();   
var urlDestino = "aciertaNumeroJSON.php?inicio=hola";
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseText;
console.log(respuesta, typeof respuesta);
var obj = JSON.parse(respuesta);
console.log(obj, typeof obj);
console.log("El número aleatorio que devuelve la consulta es: ", obj.inicio);
document.getElementById('mensaje').innerHTML = "Se ha generado un nuevo numero";
}
};
        xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

 ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 17 de Diciembre 2016, 14:05
Me dice mal formado el aciertaNumeroJSON, cuando pulso en inicioJSON hace la peticion, pero luego en el inspector en la consola me dice mal formado. Estao viendo las comillas dobles y simples pero no doy con el error.
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 18 de Diciembre 2016, 00:53
Buenas.

En chrome me funciona bien, pero en firefox no, así que he creado otra alternativa, que es crear directamente un formato JSON a traves de arrays, te dejo el php:

Código: [Seleccionar]
<?php
session_start
();

if(isset(
$_GET['inicio'])){     //se ha indicado iniciar un nuevo juego
        
$numeroAleatorio=rand(0,10);//seleccionamos un numero aleatorio entre 0 y 10
        
$_SESSION['numeroOculto'] = $numeroAleatorio;
         
        
$json['resp'] = array( 'inicio' => $_SESSION['numeroOculto']);       
}else{
    
$numeroUsuario $_GET['numero'];
    
$numeroOculto=$_SESSION['numeroOculto'];
    
    if(
$numeroUsuario $numeroOculto ){
        
$json['resp'] = array(
                                
'encontrado' => 'no',
                                
'mensaje' => 'Has introducido un valor demasiado alto'
                              
);
    }else {
        if(
$numeroUsuario $numeroOculto ){
          
$json['resp'] = array(
                                
'encontrado' => 'no',
                                
'mensaje' => 'Has introducido un valor demasiado bajo'
                              
);
        }else{
          
$json['resp'] = array(
                                
'encontrado' => 'si',
                                
'mensaje' => 'Exacto!'
                              
);
        }    
    }
}
echo(
json_encode($json)); 
?>

Saludos.
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 18 de Diciembre 2016, 12:24
Hola
Ya me funciona bien, ahora lo que me queda es crear la funcion checkAjaxJSON, ¿me puedes decir mas o menos como hacerla? lo intento y si no puedo , te pregunto.

Un saludo
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 18 de Diciembre 2016, 12:53
Hola javimf.

Esta función será casi igual que inicioJSON(), lo que tendrías que hacer es analizar el objeto que creas con JSON.parse(), que esta vez en vez de contender "inicio: unNumero" contendrá dos propiedades, que serán "encontrado" y "mensaje", el valor de estas propiedad será el que tengas que mostrar en tu html.

Prueba y me cuentas.

Saludos. ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 19 de Diciembre 2016, 14:02
He hecho esto:
Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var urlDestino = "aciertaNumeroJSON.php?inicio=hola";
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            console.log(respuesta, typeof respuesta);
            document.getElementById('encontrado').innerHTML = respuesta.querySelector('encontrado').textContent;
            document.getElementById('mensaje').innerHTML = respuesta.querySelector('mensaje').textContent;


        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}
No funciona :'(
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 19 de Diciembre 2016, 14:16
Como te dije anteriormente, una vez guardas la respuesta en la variable respuesta, tendrías que crear un objeto JSON, como en la función inicioJSON()

Código: [Seleccionar]
var obj = JSON.parse(respuesta);
y luego :

Código: [Seleccionar]
document.getElementById('encontrado').innerHTML = obj.resp.encontrado;
            document.getElementById('mensaje').innerHTML = obj.resp.mensaje;


Saludos.  ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 19 de Diciembre 2016, 15:17
Asi:
Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var urlDestino = "aciertaNumeroJSON.php?inicio=hola";
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            var obj = JSON.parse(respuesta);
            document.getElementById('encontrado').innerHTML = obj.respuesta.encontrado;
            document.getElementById('mensaje').innerHTML = obj.respuesta.mensaje;
        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 19 de Diciembre 2016, 23:01
Te faltaría guardar en una variable el número que se ingrese por teclado y mandarlo junto con el enlace.

Saludos. ;D
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 12:46
Buenas
¿algo asi?

var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroXML.php?numero=' + numPropuesto;

asi me da un error de sintaxis:
contenido incorrecto tras un elemento XML del documento  aciertaNumeroXML.php:2:1
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Un saludo
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 12:58
Recuerda que ahora la consulta tienes que hacerla a "aciertaNumeroJSON.php", por eso te está dando el error. Porque cuando recibes la respuesta del servidor esta llega en formato XML y JSON.parse() espera un string con formato JSON.

Saludos. ;D

Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 13:38
Lo he cambiado:
Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroJSON.php?numero=' + numPropuesto;
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            var obj = JSON.parse(respuesta);
            document.getElementById('encontrado').innerHTML = obj.respuesta.encontrado;
            document.getElementById('mensaje').innerHTML = obj.respuesta.mensaje;
        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}

Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 13:41
ya te funciona?
Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 13:58
No me funciona
Pero me dao cuenta que la funcion anterior , me avisa que se ha generado un nuemo numero pero no lo muestra por consola, la funcion es esta
Código: [Seleccionar]
function inicioJSON() {
    var xmlHttp = new XMLHttpRequest();
    var urlDestino = "aciertaNumeroJSON.php?inicio=hola";
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            console.log(respuesta, typeof respuesta);
            var obj = JSON.parse(respuesta);
            console.log(obj, typeof obj);
            console.log("El número aleatorio que devuelve la consulta es: ", obj.inicio);
            document.getElementById('mensaje').innerHTML = "Se ha generado un nuevo numero";
        }
    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();
}

y la funcion checkAJaxJson

Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroJSON.php?numero=' + numPropuesto;
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            var obj = JSON.parse(respuesta);
            document.getElementById('encontrado').innerHTML = obj.respuesta.encontrado;
            document.getElementById('mensaje').innerHTML = obj.respuesta.mensaje;
        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}

Título: Re:Ajax, PhP y JavasCript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 14:22
A mí me funciona correctamente.

Que navegador estás usando?

Si introduces un número y pulsas sobre "checkAJaxJson", hace algo?

Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 18:44
utilizo firefox , si introdujo un numero y pulso en CHECK AJAX JSON no hace nada, y en el inspector de codigo da este error, SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data. He probado con crhome y tampoco funciona y da error en el inspector de codigo

Un saludo
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 19:41
El error es porque está intentando leer una propiedad del objeto "obj" que no existe, porque "obj" no tiene ninguna propiedad que se llame "respuesta", sino "resp".

En la función inicioJSON() tienes que cambiar:
Código: [Seleccionar]
console.log("El número aleatorio que devuelve la consulta es: ", obj.inicio);por
Código: [Seleccionar]
console.log("El número aleatorio que devuelve la consulta es: ", obj.resp.inicio);
y en checkAjaxJSON()
Código: [Seleccionar]
document.getElementById('encontrado').innerHTML = obj.resp.encontrado;
            document.getElementById('mensaje').innerHTML = obj.resp.mensaje;

.
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 19:59
Mcnifico , funcionando.

Gracias ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 20:07
Pues si puedes pega el código de los cinco archivos por si a alguien le interesa, que no tenga que leer todo :o

Saludos. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 20 de Diciembre 2016, 20:19
Todavia no he terminado, me queda otro ejercicio el ultimo..jaja

Añade un marcador con un máximo de fallos que vaya modificándose cada vez que el usuario falle y muestre un mensaje si se han realizado todos los fallos o todos los aciertos. Para controlar los fallos puedes utilizar una variable global JavaScript.
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 20 de Diciembre 2016, 23:06
Te dejo una posible solución pos quieres realizar el ejercicio sobre ella

Código: [Seleccionar]
function marcador(acertado) {
var marcador = document.getElementById('marcador');
if(document.getElementById('fallos')){
var contadorFallos = document.getElementById('fallos');
var errores = contadorFallos.textContent;
if(acertado == 'si' ) {
contadorFallos.innerHTML = 'Ha tenido ' + errores + ' errores.';
} else {
contadorFallos.innerHTML = ++errores;
}
} else {
marcador.innerHTML = 'Errores: <span id="fallos">0</span>' ;
}
}

Esta función tendrás que llamarla desde las demás funciones, si la llamas desde la función  inicioJSON() o desde consultaAjaxXML(), hazlo sin pasar ningún parámetro.
Cuando la llames desde checkAjaxJSON(), pásale como parámetro obj.resp.encontrado, esta llamada la tendrás que hacer dentro de la función xmlHttp.onreadystatechange, lo que hace principalmente esta función es contar errores y sin usar ninguna variable con ámbito global, la parte que falta la dejo en tus manos.

Saludos. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 26 de Diciembre 2016, 21:39
He copiado la funcion, pero no se como hacer las llamadas desde las demas funciones, desde que funciones hay que llamarla
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 26 de Diciembre 2016, 21:47
Haz la llamada antes de salir del bloque if(xmlHttp.ready...{}.

Saludos. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 26 de Diciembre 2016, 22:04
asi?
Código: [Seleccionar]
function consultaAjax() {
    var xmlHttp = new XMLHttpRequest();
    var urlDestino = "aciertaNumeroXML.php?inicio=si";//envio peticion AJAX con el parametro//
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseXML;
            console.log(respuesta);
            var numero = respuesta.getElementsByTagName('inicio')[0].textContent;
            console.log(numero);
            document.getElementById('mensaje').innerHTML = 'Se ha generado un nuevo número.';
            marcador();
       
        }
    };

    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();
}

Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 28 de Diciembre 2016, 12:53
Si, desde las dos funciones donde inicias el juego, valdría con eso, desde las funciones check, recuerda que tienes que pasar como parámetro si se acertó o no.

Saludos. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 03 de Enero 2017, 23:10
Buenas y feliz año

Estoy atrancado en este ejercicio, me comentastes que le pasara como parametro si se acerto o no, pero como lo hago
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 03 de Enero 2017, 23:32
Desde la función  checkAjaxJSON():

Código: [Seleccionar]
marcador(obj.resp.encontrado);
y desde la otra función, la que chequea el xml, ahora mismo no tengo el código a mano, pero tendrías que mandar el mismo dato que  se muestra por pantalla, el que dice si se acertó o no.

Saludos y feliz año. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 04 de Enero 2017, 22:20
Pero el  marcador(obj.resp.encontrado); donde lo tengo que situar dentro de checkAjaxson

lo he puesto asi
Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroJSON.php?numero=' + numPropuesto;
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            var obj = JSON.parse(respuesta);
            document.getElementById('encontrado').innerHTML = obj.resp.encontrado;
            document.getElementById('mensaje').innerHTML = obj.resp.mensaje;
            marcador(obj.resp.encontrado);
        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}


Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 04 de Enero 2017, 22:38
Sí.

Donde lo pusiste está bien.

¿te funciona?
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 04 de Enero 2017, 23:09
No , porque me queda la funcion checkAjaxXML que en esa no he cambiado nada. De todas maneras al ejecutar checkAjaxJSON me da error, TypeError: marcador is null aunque si funciona y acierta el numero
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 05 de Enero 2017, 00:25
Eso es porque no has creado ningún elemento "html" con "id="marcador"".

La primera línea de la función marcador es esta:

Código: [Seleccionar]
var marcador = document.getElementById('marcador');
Y el error que te salta es en la última línea de esa función cuando intentas acceder a la propiedad "innerHTML" de "null".

Saludos. ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 05 de Enero 2017, 09:00
Buenas
He creado el div id = "marcador" , en el HTML, pero cuando hago la comprobacion de la funcion checkAjaxJSON me sigue dando el mismo error del null, y debajo me pone.
checkAjaxJSON/xmlHttp.onreadystatechange

creo que el error esta en esa funcion, este es el codigo de checkAjaxJSON
Código: [Seleccionar]
function checkAjaxJSON() {

    var xmlHttp = new XMLHttpRequest();
    var numPropuesto = document.getElementById('numero').value;
    var urlDestino = 'aciertaNumeroJSON.php?numero=' + numPropuesto;
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
            var respuesta = xmlHttp.responseText;
            var obj = JSON.parse(respuesta);
            document.getElementById('encontrado').innerHTML = obj.resp.encontrado;
            document.getElementById('mensaje').innerHTML = obj.resp.mensaje;
            marcador(obj.resp.encontrado);
        }

    };
    xmlHttp.open("GET", urlDestino, true);
    xmlHttp.send();

}
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: pedro,, en 05 de Enero 2017, 10:45
Buenas javimf.

Lo he probado añadiendo esta línea al código html:

Código: [Seleccionar]
<div id="marcador"></div>
y con estas funciones y me funciona correctamente.

Código: [Seleccionar]
window.onload = function() {
document.getElementById('inicioXML').addEventListener('click', consultaAjaxXML);
document.getElementById('checkAjaxXML').addEventListener('click', checkAjaxXML);
document.getElementById('inicioJSON').addEventListener('click', consultaAjaxJSON);
document.getElementById('checkAjaxJSON').addEventListener('click', checkAjaxJSON);
}
function marcador(acertado, inicio) {
var marcador = document.getElementById('marcador');
if(document.getElementById('fallos')){
var contadorFallos = document.getElementById('fallos');
var errores = contadorFallos.textContent;
if(acertado == 'si' ) {
marcador.removeChild(contadorFallos);
marcador.innerHTML = 'Ha tenido ' + errores + ' errores.';
} else {
contadorFallos.innerHTML = ++errores;
}
} else {
marcador.innerHTML = 'Errores: <span id="fallos">0</span>' ;
}
}

function consultaAjaxJSON() {
var xmlHttp = new XMLHttpRequest();   
var urlDestino = "aciertaNumeroJSON.php?inicio=si";
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseText;
console.log(respuesta, typeof respuesta);
var obj = JSON.parse(respuesta);
console.log(obj, typeof obj);
console.log("El número aleatorio que devuelve la consulta es: ", obj.resp.inicio);
document.getElementById('mensaje').innerHTML = "Se ha generado un nuevo numero";
marcador();
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();

}

function checkAjaxJSON() {
var xmlHttp = new XMLHttpRequest();   
var numPropuesto = document.getElementById('numero').value;
var urlDestino = 'aciertaNumeroJSON.php?numero=' + numPropuesto;
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseText;
var obj = JSON.parse(respuesta);
document.getElementById('encontrado').innerHTML = obj.resp.encontrado;
document.getElementById('mensaje').innerHTML = obj.resp.mensaje;
marcador(obj.resp.encontrado);
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

function consultaAjaxXML() {
var xmlHttp = new XMLHttpRequest();   
var urlDestino = "aciertaNumeroXML.php?inicio=si";
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseXML;
console.log(respuesta);
var numero = respuesta.getElementsByTagName('inicio')[0].textContent;
console.log(numero);
document.getElementById('mensaje').innerHTML = 'Se ha generado un nuevo número.';
marcador();
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

function checkAjaxXML() {
var xmlHttp = new XMLHttpRequest();   
var numPropuesto = document.getElementById('numero').value;
var urlDestino = 'aciertaNumeroXML.php?numero=' + numPropuesto;
xmlHttp.onreadystatechange = function(){   
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var respuesta = xmlHttp.responseXML;
console.log(respuesta);
document.getElementById('encontrado').innerHTML = respuesta.getElementsByTagName('encontrado')[0].textContent;
document.getElementById('mensaje').innerHTML = respuesta.querySelector('mensaje').textContent;
marcador(respuesta.getElementsByTagName('encontrado')[0].textContent);
}
};

xmlHttp.open("GET", urlDestino, true);
xmlHttp.send();
}

 ;D
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 06 de Enero 2017, 13:58
Buenas

funciona perfectamente ;D
 
gracias y que te hayan traido muchos regalos los reyes
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 06 de Enero 2017, 15:38
Tengo un problema, pero la verdad no lo entiendo. La practica la tengo que entrega , entonces la ruta donde tengo la archivos es esta:
C:\xampp\htdocs\DAW_M06_PHP\DAW_M06_T6_NUMERO
dentro de esa carpeta tengo todos los archivos html, php y js. pero cuando copio esa carpeta en mi equipo y ejecuto el html, me da un error la consola.
ReferenceError: consultaAjaxXML is not defined

No lo entiendo porque el fichero esta copiado exactamente igual.
Título: Re:Ajax, PhP y JavaScript. Juego Adivina el número.
Publicado por: javaquery en 06 de Enero 2017, 16:22
Creo que ya se cual es el problema cuando ejecuto en local el ejercicio la ruta es esta:
file:///C:/Users/javi/Desktop/DAW_M06_ACT_06_Javier%20Martin/htdocs/DAW_M06_PHP/DAW_M06_T6_NUMERO/aciertaNumero.html
Esta leyendo desde local sin hacer caso al xammp y al puerto 8089

En cambio si lo ejecuto desde NetBeans esta es la ruta.
http://localhost:8089/DAW_M06_PHP/DAW_M06_T6_NUMERO/aciertaNumero.html
aqui si lee desde red y llega la peticion a xammp y con el puerto 8089