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 i = 0, count = objJSON.length; i < count; i++){
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.value, true);
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?