2012-01-20 31 views
6

Ho una semplice chiamata AJAX in questo modo:jQuery.ajax restituisce jsonp invece di 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} })); } 
}); 

Fa parte di un completamento automatico tb che non funziona su un solo punto di vista. La ragione per cui non funziona è che invece di json, fa richiesta jsonp (sniffando ho visto che chiama l'url passato con ?callback=jQueryxxxxxxxxx), e la funzione success non viene mai chiamata perché jquery lo impacchetta in una funzione anonima il cui nome è passato in callback argomento, e il server restituisce json standard (non voglio usare jsonp in quanto è la richiesta POST e NON la richiesta tra domini). Ho controllato, sia l'URL della vista corrente che questo argomento u per l'URL di ajax sono su http://localhost:8080/myapp/areax/..., quindi non vedo perché jQuery faccia richiesta JSONP qui.

EDIT:

Visualizza su cui questo non funziona è è fatta richiesta di URL è simile a questo: http://hostname:8080/AreaName/Report/ViewReport parametro eu di Ajax è come /AreaName/MyAutoComplete/Ricerca, url in modo completo a cui completamento automatico è fatto è come http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

risposta del server è simile al seguente:

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

So che non è JSONP, per quello che dovrebbe essere

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

ma voglio rendere normale richiesta di JSON, non JSONP.

UPDATE

cosa più strana di tutto (sto iniziando a pensare che si tratta di un bug in jQuery v1.5.1 che viene utilizzato su progetto) è che quando rimuovo dataType: "json", fa una normale richiesta di JSON :)

Così, invece di come fare richiesta di jSON, ora accetterò una spiegazione sul motivo per cui questo funziona come previsto (e quello con dataType: "json" non lo fa):

$.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

Potete per favore mostrare l'URL completo inclusi eventuali parametri? – nnnnnn

+0

Puoi provare quando 'u' è relativo al tuo dominio attuale. Ad esempio:/myapp/areax/... – RvdK

+0

è una richiesta di dominio incrociato? potrebbe essere lo stesso host ma una porta diversa? È strano amico ... –

risposta

2

da il bug qui: http://bugs.jquery.com/ticket/8118

Probabilmente stai usando il plugin di validazione jquery. Il plugin di validazione di Jquery non è compatibile con jQuery 1.5 e il conflitto causa il tipo di problema che stai riscontrando qui.

Se il problema non è specifico a causa di plugin per jQuery convalida, controllare se si dispone di qualsiasi altro plugin per jQuery che potrebbe non essere compatibile con jQuery 1.5

+0

Sì, questo è il problema esatto che ho riscontrato. Come sospettavo, era l'errore in jQuery :) Grazie! –

Problemi correlati