2011-02-03 19 views
10

Acabo de actualizar de la versión 1.4 a la versión 1.5 de jQuery, y ahora mis llamadas AJAX siempre fallan con el error "etiqueta no válida".jQuery 1.5 La llamada AJAX falla con la "etiqueta no válida" para las solicitudes JSON

Un ejemplo de solicitud es:

jQuery.ajax({ 
    async: false 
    , dataType: "json" 
    , error: function (xhr, status, error) { ... } 
    , success: function (data, status, xhr) { ... } 
    , type: "post" 
    , url: "ajax/request.asp" 
}); 

En la red he encontrado se eleva este error cuando el JSON devuelto no se envuelve con devolución de llamada de jQuery (por ejemplo jQuery1234({ "something": "abcd" })

El problema es que estoy volviendo. un JSON, no un JSONP (y lo indico en la solicitud AJAX), entonces ¿por qué debo especificar una devolución de llamada en el JSON devuelto?

El 1.5 changelog no dice nada sobre esto ... (O soy yo quien no puede leer?)

Actualización:

Este es un ejemplo de un JSON que no trabaja:

{ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
} 

Y esto es lo mismo devolución de llamada-envuelta de trabajo JSON:

jQuery1502710949228847014_1296739130498({ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
}) 

Por cierto, Firebug dice que ambos son JSON válidos (y él es muy exigente con la corrección).

+0

Podría ser un problema con el propio JSON, he notado que desde 1.4 JQ ha sido mucho más estrictos sobre la estructura JSON. Mi primer proyecto JSON del '07 comenzó a fallar cuando actualicé mi JQ, abrí la salida JSON y quedé impresionado de lo mal estructurado que estaba. ¿Puedes publicar el JSON? – picus

+0

@picus: No, valido mi JSON contra múltiples validadores y está bien. Si implemento la devolución de llamada JSONP, comienza a funcionar nuevamente, por lo que no hay problema con el formato. – Albireo

+0

@picus: He agregado un ejemplo de un JSON que no funciona y funciona. – Albireo

Respuesta

28

Ok, descubrí qué demonios está pasando.

jQuery's Validation plug-in no es compatible con jQuery 1.5 (ver one y two), eliminando los rendimientos de los plug-ins al comportamiento correcto.

Si alguien más tiene este problema, hay un parche en el repositorio del plug-in: link

+0

Gracias por compartir el enlace. ¡Salvaste mi día! –

+0

Mi compañero de trabajo acaba de pasar la última hora tratando de resolver un problema similar. Actualizamos a 1.6 y no hay más conflicto con el complemento de validación. Gracias. –

1

intento: de hacer una búsqueda rápida para JSON en jquery-1.5.js y encontramos este en el corredor de 6905:

// detectar, normalizar las opciones de instalación y devoluciones de llamada para jsonp pide

jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, dataIsString /* internal */) { 

la eliminación de la "json" del primer argumento agregará el comportamiento correcto cuando especificación. dataType:"json"

5

realidad me encontré con un problema similar, pero que parece estar relacionado con este error: http://bugs.jquery.com/ticket/8398

No está necesariamente relacionada con jQuery-validar y me tomó un tiempo para entender las cosas. Resulta que jQuery 1.5 está modificando las llamadas ajax subsiguientes para json a jsonp, lo que conduce a este error.

me fijo siguiendo una de las soluciones sugeridas en el historial de cambios de errores y colocar el siguiente código en algún lugar antes de hacer mis llamadas ajax:

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

debería solucionar cualquier problema para otras peticiones Ajax también.

1

Si el código del lado del servidor se basa en el nombre de la devolución de llamada que comienza con "jsonp", es posible que tenga un problema. El prefijo de nombre de devolución de llamada se cambió a "jQuery" en la versión 1.5.

1

parece que esto se soluciona ahora en v1.6 - tuvo el mismo problema después de actualizar a la versión 1.5.1 & después de actualizar a 1.6, el problema desapareció.

2

Aquí hay una posible solución para aquellos con el complemento de validación.

tipoDatos: "JSON texto"

funciona como un encanto. No me preguntes por qué. En Chrome, puede ver un error de sintaxis de jquery al analizar el ":" en el retorno json. Y no se equivoque, el regreso es válido json. No lo intenté, pero sospecho que la respuesta de Tom también funcionará.

0

Actualización a jQuery 1.7 resuelve

0

Aquí está la solución:

$.post("...", {}, 
     function(data) { 

     // dont forget to add below lines   

     },"json"); 
+0

Debería agregar un meta texto – keyser

Cuestiones relacionadas