Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2013, 13:00
miwelillo
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 16 años, 10 meses
Puntos: 11
IE no coge bien una respuesta JSON

Estoy intentando hacer un formulario de autocompletado con JavaScript y devolviendo una respuesta JSON. Me funciona correctamente en todos los navegadores pero, como no, en IE no funciona.

Aquí tengo el código PHP que devuelve la respuesta:

Código PHP:
$ciudades $this->_ciudad->obtenerTodasPorNombre($ciudad);
            foreach(
$ciudades as $ciudad){
                
$arr_ciudades[] = array(
                    
'id_ciudad' => $ciudad->getId(),
                    
'nombre_ciudad' => $ciudad->getNombre(),
                    
'pais_relacion' => $ciudad->getPaisRelacion(),
                    
'value' => $ciudad->getNombre()
                );
            }
            
$this->view->jsonData json_encode($arr_ciudades); 
Me devuelve lo siguiente:

Código:
[{"id_ciudad":1,"nombre_ciudad":"Nueva York","pais_relacion":1,"value":"Nueva York"},{"id_ciudad":52,"nombre_ciudad":"Nueva Orleans","pais_relacion":1,"value":"Nueva Orleans"},{"id_ciudad":801,"nombre_ciudad":"Nuenen","pais_relacion":4,"value":"Nuenen"}]
Mi código JS:

Código PHP:
function search_cities_autocomplete(){
    var 
input document.getElementById('ciudad_busqueda');
    var 
id_select document.getElementById('cities_list');
    
    
input.onkeyup = function(){
        if(
input.value.length >= 3){
            
id_select.style.display "block";
            
            var 
ajax getXMLHttpRequestObject();
            
ajax.onreadystatechange = function(){
              if(
ajax.readyState == 4){
                  if((
ajax.status >= 200 && ajax.status 300) || (ajax.status == 304)){
                      if(
ajax.responseText.length 2){

                          var 
objJSON JSON.parse(ajax.responseText);                          
                          var 
output "";                         
                          for(var 
0count objJSON.lengthcounti++){
                            
output += "<p class='elem' onclick='getValue(this," input.id ", " id_select.id ")'><img src='/img/icons/countries/" objJSON[i].pais_relacion ".png' class='ico'>" objJSON[i].nombre_ciudad "</p>";                            
                          } 
                          
//    imprimimos el resultado en la capa 'ciudad_array_select_i'                        
                          
id_select.innerHTML output;
                      }
                      else{
                          
id_select.innerHTML "<p style='margin-top: 0; margin-bottom: 0; background-color: pink'><img src='/img/icons/disable.png'> Sin resultados</p>";
                      }
                  }
                  else{
                      
id_select.innerHTML 'Error' ajax.statusText;
                  }
              }  
            };
            
ajax.open('GET''/usuarios/index/obtenerciudadesjson/ciudad/' input.valuetrue);
            
ajax.send(null);
        }
    }

En principio no deberia haber ningun problema pero no me da ninguna respuesta, de hecho no me muestra ni la capa que deberia contener los resultados.
He notado que cuando hago var objJSON = JSON.parse(ajax.responseText); me da el siguiente error:

Código:
SCRIPT1014: Carácter no válido
Por lo que he buscado un poco y segun parece puede ser debido al formato incorrecto de la respuesta

http://msdn.microsoft.com/es-es/libr...(v=vs.94).aspx

No obstante yo no veo ningun tipo de error, e incluso parseando la respuesta mediante un parser online me coge todos los campos correctamente.

¿Alguien sabe a que se debe?

Última edición por miwelillo; 03/02/2013 a las 13:34