Comunidad de diseño web y desarrollo en internet online

json_encode muestra NULL en algunos resultados

Citar            
MensajeEscrito el 13 Feb 2014 07:01 am
Buenas a todos..

Me encuentro haciendo algunas pruebas con JSON y me encontré con que en algunos resultados obtengo NULL.

La base de datos, tablas y filas las tengo en utf8_general_ci

Mi Script (Lo encontré en navegando y lo modifique según mis necesidades).
Básicamente en el Index tengo un dropbox con el cual selecciono una provincia, esta acciona llama a la función presionBoton que envía el valor del option selected al PHP indicando que provincia se selecciono para luego cargar los partidos y mostrarlos.

Lo tengo subido aquí para que vean como funciona http://standbypc.com.ar/pruebas/

Código Javascript :

addEvent(window,'load',inicializarEventos,false);

function inicializarEventos()
{
  var ob=document.getElementById('provincias');
  addEvent(ob,'change',presionBoton,false);
}

var conexion1;
function presionBoton(e)
{
     var codigo=document.getElementById('provincias').value;
   if (codigo!=0){
        conexion1=crearXMLHttpRequest();
        conexion1.onreadystatechange = procesarEventos;
        conexion1.open('GET','pagina1.php?pro='+codigo, true);
        conexion1.send(null);
   }
}

function procesarEventos()
{
  var resultados = document.getElementById("resultados");
  if(conexion1.readyState == 4)
  {
    alert('Cadena en formato JSON:  '+conexion1.responseText);

    var datos=eval("(" + conexion1.responseText + ")");
    var salida='';
    for(f=0;f<datos.length;f++)
    {
      salida += 'Codigo:'+datos[f].id+"<br>";
      salida += 'Descripcion:'+datos[f].valor+"<br>";
    }
    resultados.innerHTML = salida;
  } 
  else 
  {
    resultados.innerHTML = "Cargando...";
  }
}

function addEvent(elemento,nomevento,funcion,captura)
{
  if (elemento.attachEvent)
  {
    elemento.attachEvent('on'+nomevento,funcion);
    return true;
  }
  else  
    if (elemento.addEventListener)
    {
      elemento.addEventListener(nomevento,funcion,captura);
      return true;
    }
    else
      return false;
}

function crearXMLHttpRequest() 
{
  var xmlHttp=null;
  if (window.ActiveXObject) 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  else 
    if (window.XMLHttpRequest) 
      xmlHttp = new XMLHttpRequest();
  return xmlHttp;
}


Mi PHP es el siguiente

Código PHP :

<?php

require_once 'conexion.php';

$pro= $_GET['pro'];

$select[]=array(
   'id'=>'0',
   'valor'=>'Seleccionar...'
);

$partidos = mysql_query("SELECT * FROM partidos WHERE id_provincia='".$pro."'",$conexion);

while ($partido = mysql_fetch_array($partidos, MYSQL_ASSOC)){   
   if($partido['nombre']!="NULL"){      
      
      $opcion = array(
         'id'=>$partido['id_partido'],
         'valor'=>$partido['nombre']
         );
         
      array_push($select, $opcion);
   }
}

echo json_encode($select);
?>

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Feb 2014 07:29 am
Encontre la solucion

en el PHP modifique esto:

Código PHP :

$opcion = array(
         'id'=>$partido['id_partido'],
         'valor'=>$partido['nombre']
         );


por esto:

Código PHP :

$opcion = array(
         'id'=>utf8_encode($partido['id_partido']),
         'valor'=>utf8_encode($partido['nombre'])
         );


Tengo una pregunta, yo originalmente realice la carga de los datos utilizando Latin1, tanto la base como las tablas y sus filas se encontraban configuradas con dicho charset y luego de ver que JSON_ENCODE me mostraba NULL pase todo a UTF-8. Mi pregunta es la siguiente luego de realizada la carga de una base de datos queda todo en el charset original por mas que luego lo cambie? por que de no ser así, no entendería por que motivo al agregar el encode a utf8 funciona todo correctamente cuando supuestamente ya estaría todo codificado en utf8

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Feb 2014 12:19 pm
¿Y la conexión a la base de datos qué codificación tiene?.

Además, Ajax es por omisión utf8 pero tampoco veo que estés enviando las cabeceras correctas del lado de PHP.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Feb 2014 06:09 pm
Puede que la base este codificada mal. igual esta en ISO , latin o una cosa de esas. por que agregar el utf8 encode :( por variable es una malisima practica.

tambien el html debe estar en utf8 y por si las moscas <script charset="utf-8"></script>

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

firefox

 

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