Autor Tema: Ajax, PhP y JavaScript. Juego Adivina el número con xml y Json Código ejecutable  (Leído 19136 veces)

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #20 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.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #21 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.

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #22 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

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #23 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

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #24 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 :'(
« Última modificación: 19 de Diciembre 2016, 15:23 por pedro,, »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #25 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

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #26 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();

}

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #27 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

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #28 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

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #29 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


javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #30 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();

}


pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #31 en: 20 de Diciembre 2016, 13:41 »
ya te funciona?

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #32 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();

}

« Última modificación: 20 de Diciembre 2016, 14:12 por pedro,, »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavasCript. Juego Adivina el número.
« Respuesta #33 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?


javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #34 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

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #35 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;

.

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #36 en: 20 de Diciembre 2016, 19:59 »
Mcnifico , funcionando.

Gracias ;D

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #37 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

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #38 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.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Ajax, PhP y JavaScript. Juego Adivina el número.
« Respuesta #39 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
« Última modificación: 20 de Diciembre 2016, 23:09 por pedro,, »

 

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