Estoy tratando de realizar algunas operaciones básicas con jQuery y JSON. Actualmente tengo dificultades con jQuery para aceptar la respuesta JSON de mi aplicación de marco de juego. A continuación se muestra una versión simplificada del código que aún produce el error.
$.ajax({ type: 'POST', url: "@{FrontEnd.isUsernameAvailable()}", data: "name=thisnameisavailable", cache: false, success: function(data) { console.log("Success... "); }, error: function(jqXHR, textStatus, errorThrown) { console.log("Error... " + textStatus + " " + errorThrown); }, dataType: 'json' });La devolución de llamada de error siempre se activa. Muestra
Error... parsererror jQuery15001997238997904205_1298484897373 no fue llamado
La inspección del JSON devuelto a través de Firebug no muestra errores y varias herramientas de pelusa JSON también validan. Cambiar el tipo de datos a "texto" hace que se llame al éxito. Pero estoy tratando de usar la llamada isUsernameAvailable como parte del complemento de validación de jQuery, por lo que necesito que devuelva un JSON válido.
Tal vez no lo entienda bien, pero ¿no podría establecer el tipo de datos en text y dataType () los datos devueltos?
success: function(data) { data = JSON.parse(data); // process data },Editado para agregar una solución generalmente acordada (anteriormente solo un comentario):
Acabo de echar un vistazo a api.jquery.com/jQuery.ajax y parece que con jQuery 1.5 puedes hacer una especie de conversión de tipo. "valores múltiples separados por espacios: a partir de jQuery 1.5, jQuery puede convertir un tipo de datos de lo que recibió en el encabezado de tipo de contenido a lo que necesita. Por ejemplo, si desea que una respuesta de texto se trate como XML, use " texto xml" para el tipo de datos". Tal vez puedas probar "texto json".
Recibí el mismo error tan pronto como actualicé a jQuery 1.5. Resulta que mi problema se debe a que también estoy usando el complemento de validación de jquery, que no es compatible con jQuery 1.5. Si elimino el complemento de validación de jquery, $.ajax() con dataType json funciona bien.
Más información sobre la incompatibilidad del complemento de validación de jquery aquí: http://bugs.jquery.com/ticket/8118
También obtuve "parsererror jQueryNNNN_NNN no fue llamado" (usando jsonp y jQuery 1.7.2) La razón fue que uno de los valores en la estructura json devuelta contenía líneas nuevas. Espero que esto ayude a alguien.