2011-02-10 14 views
15

Acabo de actualizar a JQuery 1.5 y todas mis llamadas ajax que devuelven JSON y una cantidad de complementos que se rompen instantáneamente.JQuery 1.5 y nuevo tipo de datos "Text JSON"

En mi pre-1.5 de código, que especifica el tipo de datos como:

dataType: "json" 

Cambiar el tipo de datos a:

dataType: "text json" 

soluciona el problema, pero no quiero cambiar manualmente los plugins como esto afectará las actualizaciones.

¿Hay alguna manera de manejar esto mejor con menos interrupciones?

+2

Si devuelven JSON, serían llamadas AJAJ, ¿verdad? ;) – Guffa

+0

Si no especifica el tipo de datos en el complemento, más bien utiliza el objeto de configuración Global AJax para hacer esto, esto no resolvería el problema. –

+0

Si posee los archivos fuente que están generando los datos para las llamadas AJAX, vaya agregue el encabezado 'Content-Type: application/json' y debería arreglar todos sus scripts (esto debe hacerse siempre que genere JSON). –

Respuesta

7

Este problema está causado por el complemento de validación de jQuery y por cómo extiende el objeto ajaxSettings para su propio uso (cambia las llamadas json a las llamadas jsonp). No se espera que haya una actualización oficial a la validación plugin de pronto, pero mientras tanto, hay un parche disponible aquí que soluciona el problema:

https://github.com/bigfix/jquery-validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b

Editar:

jQuery Validación Plugin, compatibles con jQuery 1.5.1, disponible en el cubo git: https://github.com/jzaefferer/jquery-validation

Edición # 2: jQuery Validación Plugin 1.8, compatible con jQuery 1.5.1 (y anteriores) se libera:

Lea acerca de ellos: http://bassistance.de/2011/03/25/release-validation-plugin-1-8/

descargarlo: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+0

¡Gracias por esta respuesta! Sí, incluso al devolver el tipo de contenido (aplicación/json) correcto del servidor, el complemento de validación de jQuery actual (1.7) hace que se rompa. –

+0

buena respuesta señor – dagda1

3

Código no probado, agréguelo después de que jQuery esté incluido y antes de que se ejecute su código personalizado.

jQuery.ajaxSetup({ 
    converters: { 
    "json": jQuery.parseJSON, 
    "* json": jQuery.parseJSON 
    } 
}); 
+0

Eso está en la misma línea que algo que estaba por sugerir ... La nueva versión de jQuery puede comportarse de manera diferente si el tipo de datos es diferente del tipo de contenido de los datos que llegan, es decir, intenta realizar una conversión antes de analizar como el tipo especificado. – Guffa

+0

Esto tampoco funciona desafortunadamente. He comprobado el tipo de contenido en el violín y de hecho es application/json; charset = utf-8. – dagda1

4

me encontré con este error jQuery que corrija el problema http://bugs.jquery.com/ticket/8084.

añadiendo el siguiente código después de la declaración de la escritura jQuery soluciona el problema:

$ .ajaxSetup ({ jsonp: null, jsonpCallback: null });