2010-06-09 16 views
5

Sto cercando di ottenere un callback jsonp che funzioni utilizzando jquery all'interno di uno script greasemonkey. Ecco il mio jquery:Il metodo di callback JSONP non è definito

$.ajax({ 
    url: "http://mydomain.com/MyWebService?callback=?", 
    data: { authkey: "temphash" }, 
    type: "get", 
    dataType: "json", 
    cache: false, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

nel mio webservice (asp.net) che sto restituendo la risposta con un tipo di contenuto di application/javascript. La risposta del server è in realtà rispedicenti è:

jsonp1276109314602({"message":"I'm getting tired of this not working"}) 

Il nome del metodo jsonp1276109314602 viene generato in modo casuale da jQuery, e sto afferrando con Request.QueryString["callback"]

Tuttavia la mia funzione di successo non viene mai chiamato e il Firebug console mi dà un errore dicendo jsonp1276109314602 is not defined.

Cosa sto sbagliando?

NOTA Sto effettuando questa chiamata da uno script greasemonkey su una pagina di craigslist. Si tratta di una richiesta interdominio, ma posso vedere che la richiesta è in effetti inviata al server e restituisce una buona risposta, ma per qualsiasi motivo il callback registrato creato da jquery non appare quando la risposta ritorna. Funziona bene se eseguo lo script nella console firebug dalla pagina craigslist, ma non quando viene eseguito dallo script greasemonkey.

+0

State Embedding jQuery nello script GreaseMonkey o caricarla separatamente? – James

+0

... Oppure, jQuery è già disponibile nella pagina che stai migliorando? – James

+0

L'ho caricato tramite lo script greasemonkey – Micah

risposta

2

Si scopre che devi fare qualche monkeying extra in giro (gioco di parole) per farlo funzionare all'interno di uno script greasemonkey.

La risposta lunga può essere trovata qui: jQuery.getJSON inside a greasemonkey user script.

La risposta breve è di abbandonare l'approccio JSONP per inserire questa nello script:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js 

Non sono sicuro ho capito tutto, ma comunque funziona come un campione e io sono in grado di fare dominio croce richieste dal mio script.

+1

Se sei interessato a come funziona lo script 'gm_jq_xhr.js', puoi leggere [una spiegazione] (http://ryangreenberg.com/archives/2010/03/greasemonkey_jquery.php) che ho scritto. – Ryan

3

Avete già provato:

$.ajax({ 
    url: "http://mydomain.com/MyWebService", 
    data: { authkey: "temphash" }, 
    type: "get", 
    dataType: "jsonp", 
    cache: false, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

Da docs:

"JSONP": Carichi in un blocco di JSON utilizzando JSONP. Aggiungerà un ulteriore "? Callback =?" alla fine del tuo URL per specificare il callback.

Non ho esaminato il codice sorgente di jQuery ma è possibile che la funzione di callback non venga creata a meno che non si specifica jsonp per l'opzione dataType.

Problemi correlati