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} })); }
});
Puede usted por favor mostrar la URL completa, incluyendo cualquier parámetro? – nnnnnn
Puedes probar cuando 'u' es relativo a tu dominio actual. Por ejemplo:/myapp/areax/... – RvdK
¿es una solicitud de dominio cruzado? puede ser el mismo host pero diferente puerto? Es extraño amigo ... –