Comunidad de diseño web y desarrollo en internet online

Ayuda: Cargar datos JSON de otro servidor

Citar            
MensajeEscrito el 03 Jun 2014 04:16 pm
Saludos

Bueno, hoy me dio por aprender a trabajar con JSON XD, y estuve haciendo el tutorial Crear JSON con PHP y jQuery. El asunto es que todo iba bien hasta que se me ocurrio poner el archivo para generar el JSON en un servidor y el que hace la peticion en otro, y ya no salio bien jajaja.

Leyendo y arreglando el codigo he llegado a algo mas o menos asi

archivo que genera el JSON, dev_stock.php

Código PHP :

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Pragma: no-cache"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
header('Content-type: application/json; charset=utf-8'); 

if(isset($_GET['codigo']) && !empty($_GET['codigo']))
{
   //conexion a la BD
        include('../conectar.php');
   
   $qbusca=mysql_query("select * from inventario where COD_ART='".$_GET['codigo']."'");
   if($rw=mysql_fetch_array($qbusca))
   {
      $pregunta = new stdClass();
      $pregunta->codigo = $_GET['codigo'];
      $pregunta->cantidad = $rw['can_existencia'];      
      $json = json_encode($pregunta);
      echo $json;
   }else{
      $pregunta = new stdClass();
      $pregunta->codigo = $_GET['codigo'];
      $pregunta->cantidad = '0';      
      $json = json_encode($pregunta);
      echo $json;
   }
}




y este el archivo que hace la petición y que luego cargaría el los datos, pruebajson.php

Código PHP :

<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
</head>
<body>
   <h1></h1>
   <h2></h2>
<script type="text/javascript">
   
   $.getJSON('http://dominioexterno.cl/json/dev_stock.php?callback=?','codigo=TY815400X-O',{format: "jsonp"}, function(data) {
           $("h1").html('CODIGO:'+data['codigo']);
           $("h2").html('CANTIDAD:'+data['cantidad']);

   });
 
</script>   
</body>
</html>


el archivo que genera el JSON anda bien, si entro directamente puedo ver el JSON que gernera, el problema al parecer esta en el $.getJSON. Revise por consola en chrome, y me muestra este error Uncaught SyntaxError: Unexpected token :

Ojala alguien me pueda decir en que me estoy equivocando, desde ya, gracias

Por LordKras

1 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Jun 2014 12:34 pm
Es al revés. El problema sí está en el JSON que se genera, es lo que está diciéndote el mensaje de error.

Puedes usar esta página para validar la sintaxis del JSON que estás generando:
http://jsonlint.com/

... O puede que PHP esté generando un mensaje de error que destruye la sintaxis de JSON...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Jun 2014 01:49 pm
Gracias por responder

Probé el Json que genera en la pagina que mencionas, y me dice que es valido.

Hice un cambio ahora en el php que retorna los datos, ya que me di cuenta que estaba usando JSON, pero estaba llamando a un JSONP( por lo de recuperar un json desde otro servidor).

El cambio lo hice de la siguiente manera en la parte que retorna la respuesta

Código PHP :

$json = json_encode($pregunta);
echo $_GET['callback']."(".$json.")";


Con ese cambio ya no aparece el mensaje de error "Uncaught SyntaxError: Unexpected token : " ni ningún otro, pero aun así no logro recuperar la información con jquery.

Sigo colgado con esto, aun no descubro que estoy implementando mal.

Por LordKras

1 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 05 Jun 2014 03:05 am
si se trabaja con json a secas, entre servidores, recuerda que los navegadores ya trabajan con CROSSDOMAIN, busca al respecto de eso en google

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Jun 2014 12:23 pm
Lo que dice tuadmin tiene sentido.

Si el método $.getJSON() es una petición Ajax a un dominio diferente del que se carga la página, entonces se aplica lo que se llama Same Domain Policy: http://es.wikipedia.org/wiki/Política_del_mismo_origen

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Jun 2014 07:47 pm
Gracias por las respuestas

Si estuve averiguando al respecto, y justamente por eso use callback=? en el llamado al php, y el formato JSONP, los cuales, por lo que logre entender, me permitían trabajar entre servidores.

Al final me funciono con el siguiente código

Este es el codigo que retorna el JSONP en un servidor

Código PHP :

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Pragma: no-cache"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
header('Content-type: application/json; charset=utf-8'); 

if(isset($_GET['codigo']) && !empty($_GET['codigo']))
{

   include('../conectar.php');//conexión a la base de datos
   
   $qbusca=mysql_query("select * from inventario where COD_ART='".$_GET['codigo']."'");
   if($rw=mysql_fetch_array($qbusca))
   {
      $pregunta = new stdClass();
      $pregunta->codigo = $_GET['codigo'];
      $pregunta->cantidad = $rw['can_existencia'];      
      $json = json_encode($pregunta);
      echo $_GET['callback']."(".$json.")";
      
   }else{
      $pregunta = new stdClass();
      $pregunta->codigo = $_GET['codigo'];
      $pregunta->cantidad = '0';      
      $json = json_encode($pregunta);
      echo $_GET['callback']."(".$json.")";
      
   }
}


y este el que lo llama en el otro servidor

Código HTML :

<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
</head>
<body>
   <h1></h1>
   <h2></h2>
<script type="text/javascript">
   
   $.getJSON('http://midominio/json/dev_stock.php?callback=?&codigo=cod000',{format: "jsonp"}, function(data) {
        $("h1").html('CODIGO:'+data['codigo']);
        $("h2").html('CANTIDAD:'+data['cantidad']);
   });
 
</script>   
</body>
</html>

Por LordKras

1 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.