Foros del Web » Programando para Internet » PHP »

Otra Alternativa a json... cual?

Estas en el tema de Otra Alternativa a json... cual? en el foro de PHP en Foros del Web. Hola a tod@s, Tengo unos programas desarrollados con JQuery en los que las peticiones al servidor las hago con data Type: 'json' . Ta todo ...
  #1 (permalink)  
Antiguo 27/02/2012, 13:43
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Pregunta Otra Alternativa a json... cual?

Hola a tod@s,

Tengo unos programas desarrollados con JQuery en los que las peticiones al servidor las hago con data Type: 'json'. Ta todo ok.

Resulta que se me hace necesario hacer la instalación de esos programas en otro equipo que tiene instalado PHP 5.1.6 y según he visto en la documentación es que la extensión json viene implementada en PHP a partir de la versión 5.2 y que para hacerlo cancionar en versiones anteriores se debe hacer la instalación de la extensión por aparte. Cosa que en la empresa donde se va a instalar dichos programas no me es permitido hacer actualizaciones de ese tipo.

De acuerdo con lo expuesto, cómo puedo manejar las respuestas obtenidas del servidor similares sin utilizar json, ya que la documentación que he encontrado se refiere a que en el servidor se construye la respuesta en código HTML. Es decir, cómo puedo hacer que desde el servidor (la parte PHP) me entregue las respuestas en un objeto para no tener que hacer tanta modificación a mis programas.

Será que me hice entender?

Gracias de antemano por su ayuda


Un Cordial Saludo
  #2 (permalink)  
Antiguo 27/02/2012, 14:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Otra Alternativa a json... cual?

Hola augusto_jaramil, hace tiempo estaba en un problema parecido al tuyo y gracias a PEAR lo pude solucionar:

Descargas la librería de aquí:
http://pear.php.net/pepr/pepr-proposal-show.php?id=198
(No requiere instalación, es un archivo PHP más)

Lo descargas de donde dice "PEAR package file (.tgz)"

Lo descomprimes y dentro de la carpeta, aparte de haber ejemplos hay un archivo llamado "JSON.php". Este es el archivo que necesitas incluir en tu código PHP para codificar o decodificar el JSON, ejemplo:

Código PHP:
Ver original
  1. <?php
  2. if ( !function_exists('json_decode') ){
  3.     function json_decode($content, $assoc=false){
  4.                 require_once 'Services/JSON.php';
  5.                 if ( $assoc ){
  6.                     $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  7.         } else {
  8.                     $json = new Services_JSON;
  9.                 }
  10.         return $json->decode($content);
  11.     }
  12. }
  13.  
  14. if ( !function_exists('json_encode') ){
  15.     function json_encode($content){
  16.                 require_once 'Services/JSON.php';
  17.                 $json = new Services_JSON;
  18.                
  19.         return $json->encode($content);
  20.     }
  21. }
  22. ?>

y para usarlo con decodificar por ejemplo:

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r(json_decode('[1,2,3]'));
  3. echo '</pre>';

A mí me funciona bastante bien. Prueba y me avisas.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 27/02/2012, 14:22
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Otra Alternativa a json... cual?

Gracias andresdzphp

Dejame tan pronto vaya por la empresa hago lo que me indicas y te estoy comentando

De nuevo Mil Gracias de antemano
  #4 (permalink)  
Antiguo 27/02/2012, 14:31
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Otra Alternativa a json... cual?

Me faltó decirte que si usas un array multidimensional, debes decodificar el JSON así:

Código PHP:
Ver original
  1. echo '<pre>';
  2. print_r(json_decode($json, true));
  3. echo '</pre>';

Es importante el segundo parámetro en true

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 02/03/2012, 08:21
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Otra Alternativa a json... cual?

Que tal Don andresdzphp,

Diusculpame la demora, hasta ayer tarde pude ir a hacer la prueba.

Te comento, funciono la vaina. Este es el código que estoy utilizando para las pruebas aplicando lo que me indicaste:

Código PHP:
<?
header
("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " gmdate"D, d M Y H:i:s" ) . "GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Content-type: text/html; charset=iso-8859-1");
header("Pragma: no-cache");

session_start();

include_once(
"lee_base.php");
include_once(
"configuracion/abrirbd.php");
include_once(
"JSON.php");

if (isset(
$_POST["accion"])) {
    
$json = new Services_JSON();
    
$ced $_POST["ced"][0];
    
$nom trim($_POST["nom"][0]);
    if (
strlen($ced) >)
        
$sql "SELECT cedula, trim(nombre) as nombre FROM maestro WHERE cedula='$ced'";
    else
        
$sql "SELECT cedula, trim(nombre) as nombre FROM maestro WHERE nombre LIKE '$nom'";
    
$res lee_todo($sql);
    
$content = array("sql" => $sql,
                     
"data" => $res
                    
);
    
$output $json->encode($content);
    print(
$output);
    die;
}
muestra_forma();
die;

function 
muestra_forma() {
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script language="javascript" type="text/javascript" src="js/jquery.js"></script>
        <script>
            $(document).ready( function () {
                $("input").change( function () {
                    datos = $("#depe").serialize()+"&accion=envia";
console.log(datos);
                    $.ajax({
                        data: datos,
                        type: "post",
                        dataType: "json",
                        cache: false,
                        async: true,
                        //contentType: "application/json; charset=iso-8859-1",
                        url: "c.php",
                        success: function(json) {
console.log(json);
                            $.each(json.data, function (clave, valor) {
                                $.each(valor, function (key, vr) {
                                    if (key == "cedula")
                                        $("#ced0").val(vr);
                                    if (key == "nombre")
                                        $("#nom0").val(vr);
                                });
                            });
                        }
                    });
                });
                return false;
            });
        </script>
    </head>
    <body>
        <form action="<?= $PHP_SELF?>" name="depe" id="depe" method="post">
            <td>Id: <input type="text" id="ced0" name="ced[0]" value=""></td>
            <td>Nombre: <input type="text" id="nom0" name="nom[0]" value=""></td>
        </form>
    </body>
</html>
<?
?>
Me queda una duda:
Tengo líos con el caracter Ñ: Este es un caso que me ha sacado la piedra en estos días.... Al ejecutar este código indicándole un Id el servidor realiza una consulta para obtener el nombre correspondiente. Si el nombre registrado en la base de datos es por decir algo PIÑEROS PEREZ PEDRO el nombre obtenido es PIхROS PEREZ PEDRO aunque al ver el console.log veo que la respuesta es PI\u0445ROS PEREZ PEDRO. Ahora, si hago la consulta por nombre ingreso PIÑEROS PEREZ PEDRO veo que la variable JQuery datos = $("#miforma").serialize(); su contenido queda

ced%5B0%5D=&nom%5B0%5D=PI%C3%91EROS+PEREZ+PEDRO&accion=envia

y al servidor ejecuta el query

({sql:"SELECT cedula, trim(nombre) as nombre FROM maestro WHERE nombre LIKE 'PI\xD1EROS PEREZ PEDRO' ORDER BY nombre", data:[]})

Pero no retorna datos.

Como podes ver, hay un lío en la codificación de ese caracter en todo lado.

Agradezxo de antemano su ayuda,

Un Cordial Saludo

Etiquetas: jquery
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:41.