2012-01-20 27 views
6

Tengo una simple llamada ajax así:jQuery.ajax devuelve jsonp en lugar de JSON

$.ajax({ 
     url: u, type: "POST", dataType: "json", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 

Es parte de un autocompletar tb que no funciona en una sola vista. La razón por la que no funciona es que en lugar de json, hace la solicitud jsonp (olfateando vi que llama a la url pasada con ?callback=jQueryxxxxxxxxx), y nunca se llama a la función de éxito porque jquery la empaqueta en una función anónima cuyo nombre se pasa en devolución de llamada argumento, y el servidor devuelve json estándar (no quiero usar jsonp ya que es una solicitud POST y NO una solicitud entre dominios). Lo comprobé, tanto la URL de la vista actual como u para el argumento url ajax están en http://localhost:8080/myapp/areax/..., así que no veo por qué jQuery hace la solicitud de JSONP aquí.

EDIT:

Ver en la que esto no funciona se está hecha solicitud de URL es la siguiente: http://hostname:8080/AreaName/Report/ViewReport parámetro yu del Ajax es como /AreaName/MyAutoComplete/Buscar, url tan completa autocompletar al que se hace es como http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

respuesta del servidor tiene el siguiente aspecto:

[{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}] 

Yo sé que no es jsonp, para que sea

<script> 
jQuery151013129048690121925_1327065146844([{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]); 
</script> 

Pero quiero hacer una petición JSON normal, no jsonp.

ACTUALIZACIÓN

lo más raro de todo (estoy empezando a pensar que es un error en v1.5.1 jQuery que se utiliza en el proyecto) es que cuando quito dataType: "json", se hace una petición normal de JSON :)

Así, en lugar de cómo hacer la solicitud JSON, ahora voy a aceptar una explicación de por qué esto funciona como se esperaba (y el que tiene tipo de datos: "json" no lo hace):

$.ajax({ 
     url: u, type: "POST", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 
+0

Puede usted por favor mostrar la URL completa, incluyendo cualquier parámetro? – nnnnnn

+0

Puedes probar cuando 'u' es relativo a tu dominio actual. Por ejemplo:/myapp/areax/... – RvdK

+0

¿es una solicitud de dominio cruzado? puede ser el mismo host pero diferente puerto? Es extraño amigo ... –

Respuesta

2

de el error aquí: http://bugs.jquery.com/ticket/8118

Probablemente esté utilizando el complemento jquery-validation. El complemento Jquery-validation no es compatible con jQuery 1.5 y el conflicto causa el tipo de problema que tiene aquí.

Si el problema no se debe específicamente a jQuery plugin de validación, comprobar si tiene cualquier otro plugin de jQuery que podrían no ser compatibles con jQuery 1.5

+0

Sí, este es el problema exacto que encontré. Como sospechaba, era el error en jQuery :) ¡Gracias! –

Cuestiones relacionadas