2012-06-24 16 views
8

Sto riscontrando qualche problema con jsonp e jquery.jQuery JSONP non chiama la richiamata

Questo è il mio codice -

var myCallback = function(data) { 
    console.log(data); 
}; 

$.ajax({ 
    url: my_url, 
    type: 'GET', 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    jsonpCallback: 'myCallback' 
}); 

jQuery aggiunge qualcosa di simile a ?callback=myCallback&_=1340513330866 my_url e i dati restituiti dal my_url è myCallback('abcd') - anche se in realtà sarà di ritorno del codice HTML al posto del abcd.

Problema: abcd non è registrato nella console tramite myCallback. Quindi cosa sto sbagliando? Avevo l'impressione che i dati restituiti vengano eseguiti come avviene all'interno dei tag di script?

+0

puoiaffiggere un esempio della risposta che si desidera – matt3141

+1

'myCallback' deve essere globale ... è vero? –

risposta

16

Se si utilizza la propria funzione, allora si deve dichiarare in modo esplicito come globale. Per esempio:

window.myCallback = function(data) { 
    console.log(data); 
}; 

DEMO


Spiegazione

Ogni funzione che dovrebbe essere chiamato in risposta a una richiesta JSONP di successo deve essere globale. jQuery sta facendo anche questo. Questo perché JSONP non è altro che includere un file JavaScript (generato per la maggior parte del tempo (il più delle volte) con un tag <script>, che contiene solo una chiamata di funzione. Poiché ogni script viene valutato nell'ambito globale, anche la funzione chiamata deve essere globale.

+0

mi hai salvato il tempo. grazie – jasper

+0

@Felix - Grazie, l'esempio che mi hai dato mi ha aiutato molto. 10; – Aviator

+0

funziona, grazie! – shaosh

-1

Rimuovere singola citazione dal metodo chiamato questo lavoro, Si prega di verificare il codice qui,

var myCallback = function(data) { 
     console.log(data); 
    }; 

$.ajax({ 
    url: my_url, 
    type: 'GET', 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    jsonpCallback: myCallback 
}); 

Prova questo fiddle

+0

Questo non funzionerà. Dalla documentazione: * "A partire da jQuery 1.5, è anche possibile utilizzare una funzione per questa impostazione, nel qual caso il valore di jsonpCallback è ** impostato sul valore di ritorno di tale funzione **." *. Il tuo violino non è impostato correttamente, quindi mi chiedo che cosa dovrebbe dimostrare. –

+0

Ma quando ho provato a lavorare su sample ho anche aggiunto un violino funzionante, puoi controllare il violino che ho aggiunto –

+0

Come ho detto, non so cosa dovrebbe mostrare la tua demo. Mostra solo un avviso con 'indefinito' ... che non prova nulla. Non hai nemmeno usato l'URL JSONP per il violino. Se dai un'occhiata agli strumenti per sviluppatori (scheda Rete, supponendo Chrome) vedrai che non viene fatta nessuna richiesta ... la chiamata Ajax non ha luogo. Per essere chiari: viene visualizzato un avviso perché jQuery chiama la funzione assegnata a 'jsonpCallback' ** per ottenere il nome di callback **, proprio come dice la documentazione. È ** non ** chiamato in risposta ad una chiamata Ajax di successo. –

0

Perché non semplicemente:

$.getJSON(my_url, myCallback); 

questo si occuperà la funzione di scoping e sembra molto più semplice

+0

Questo non funzionerà con Jsonp –

Problemi correlati