2009-04-06 55 views
15

Aparece un error de análisis al usar jQuery para cargar algunos datos JSON. He aquí un fragmento de mi código:jQuery.ajax() + objeto JSON vacío = error de análisis

jQuery.ajax({ 
    dataType: "json", 

    success: function (json) 
    { 
     jQuery.each(json, function() 
     { 
      alert(this["columnName"]); 
     }); 
    } 
}); 

consigo ningún error al analizar un objeto JSON que no esté vacía. Así que supongo que el problema es con mi serializador.


La pregunta es: ¿Cómo formateo un objeto JSON jQuery vacío, que no considerará mal formado?

Esto es lo que he probado hasta ahora, sin éxito:

{[]} 

{[null]} 

{} 

{null} 


{"rows": []} 

{"rows": null} 

{"rows": {}} 



ACTUALIZACIÓN:

Puedo entender que he estado un tanto vaga - y mucho intento y aclaro:

El análisis del objeto JSON no es el problema aquí - JQuery es - creo.

jQuery arroja un error de análisis (invoca la función de error). Parece que la validación JSON interna de jQuery no acepta ninguno de los objetos mencionados anteriormente. Ni siquiera los válidos.

salida de la función de error es:

XMLHttpRequest: XMLHttpRequest readyState=4 status=200
textStatus: parsererror
errorThrown: undefined

Esto va para todos los objetos antes mencionados.

+0

Ese es el problema con subconjuntos, que Don lo tengo todo. –

+0

todos menos 3er ejemplo no son válidos JSON, ya que no hay ninguna clave en el diccionario – cobbal

+0

Actualizado con algunos intentos más. Aún obteniendo errores de análisis. – roosteronacid

Respuesta

1

En lugar de:

$(json).each(function() { ... }); 

Creo que desea que se le usando:

$.each(json, function() { ... }); 

Desde el jQuery.each documentation:

This function is not the same as $().each() - which is used to iterate, exclusively, over a jQuery object. This function can be used to iterate over anything.

+0

Type'o.Pero gracias, editado y guardado. En realidad, no es una respuesta. – roosteronacid

1

¿Verificó si el JSON se devuelve correctamente en el primer lugar antes de cada uno? Establezca el valor vacío como {}, y verifique si es así antes. Cada

También ayudaría saber cómo se ve su JSON cuando hay datos.

2

que busca esto:

[] 

una matriz vacía. Es decir, si planea iterar de inmediato, entonces lo que necesita es una matriz.

5

primer lugar {[]}, {[null]}, y {null} no funcionará porque todos ellos son objetos JSON no válidos (según lo verificado por el JSON validator).

Los objetos restantes son todos objetos JSON válidos, por lo que su función success debe invocarse.

Si pasa un objeto que no es un array o un array, la función each enumerará su objeto json por sus propiedades nombradas. En el caso de los tres objetos que tienen cada uno una propiedad rowsthis se establecerán en [], null y {} respectivamente, ninguno de los cuales tiene un atributo columnName por lo que se generará un error indefinido.

Su objeto {}, por otro lado, no tiene propiedades, por lo que no debería estar causando un error porque la llamada each se repetirá 0 veces. ¿Qué muestra la siguiente línea si la agrega como la primera línea en su función success?

alert(typeof json + ' ' + (json == null)); 
2

Su servicio web puede estar devolviendo nulo. Descubrí que devolver nulo desde una llamada de servicio web devuelve una respuesta con el código de estado 200, "Ok", pero jQuery arroja un error parse después.

Si este es el caso, no tiene nada que ver con lo que está enviando al servidor, y todo lo que el servidor está enviando de vuelta.

Si puede cambiar el servicio web, puede intentar devolver un objeto JSON vacío, o un valor predeterminado en lugar de nulo. Alternativamente, puede verificar este escenario de error en su manejador de errores, sabiendo que esto significa que su llamada devolvió nulo.

0

Estaba teniendo problemas similares al solicitar un JSON válido del servidor.

Mi servidor estaba sirviendo el tipo de contenido de texto/javascript

no estaba usando el ajuste jQuery.ajax opcional de 'tipo de datos' así jQuery se interpretting la salida de un javascript (por ejemplo, acolchado JSON), no ordenada JSON.

Añadiendo un tipo de datos: 'JSON' al objeto de configuración pasado al método ajax de jQuery resolvió el problema.

0

Tuve este problema también y lo resolví utilizando el jsonserializer en mi servicio web para formatear una cadena vacía. el resultado es "\" \ "" esencialmente "";

9

La solución es devolver un código de estado de 204 en lugar de 200 desde el servidor, 204 es "sin contenido" y volverá éxito, mientras que no se trata de invocar el analizador

Cuestiones relacionadas