2010-06-09 26 views
5

Estoy tratando de obtener una devolución de llamada jsonp trabajando usando jquery dentro de una secuencia de comandos greasemonkey. Aquí está mi jQuery:El método de devolución de llamada JSONP no está definido

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

en mi servicio web (asp.net) Voy a devolver la respuesta con un tipo de contenido de application/javascript. La respuesta del servidor es en realidad el envío de vuelta es:

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

El nombre del método jsonp1276109314602 se genera aleatoriamente por jQuery, y estoy agarrando con Request.QueryString["callback"]

Sin embargo, mi función éxito nunca se llama y el quemador, consola me da un error diciendo jsonp1276109314602 is not defined.

¿Qué estoy haciendo mal?

NOTA Estoy haciendo esta llamada desde un script de greasemonkey en una página craigslist. Es una solicitud entre dominios, pero puedo ver que la solicitud está llegando al servidor y devolviendo una buena respuesta, pero por alguna razón la devolución de llamada registrada que crea jquery parece no existir cuando la respuesta vuelve. Funciona bien si ejecuto el script en la consola de Firebug desde la página craigslist, pero no cuando se ejecuta desde el script greasemonkey.

+0

¿Está la incrustación de jQuery en el script de Greasemonkey o cargar por separado? – James

+0

... O, ¿jQuery ya está disponible en la página que está mejorando? – James

+0

Lo tengo cargado en la secuencia de comandos de greasemonkey – Micah

Respuesta

2

Resulta que tienes que hacer algunos monos adicionales (juego de palabras) para que funcione dentro de un script de greasemonkey.

La respuesta larga se puede encontrar aquí: jQuery.getJSON inside a greasemonkey user script.

La respuesta corta es que zanja el enfoque JSONP e incluir esto en la secuencia de comandos:

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

No estoy seguro de entender todo, pero sin embargo, funciona como un campeón y yo soy capaz de hacer varios dominios solicitudes de mi script

+1

Si le interesa saber cómo funciona el script 'gm_jq_xhr.js', puede leer [una explicación] (http://ryangreenberg.com/archives/2010/03/greasemonkey_jquery.php) que escribí. – Ryan

3

ha intentado ya:

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

De docs:

"JSONP": Cargas en un bloque de JSON utilizando JSONP. Se agregará un extra "? Callback =?" hasta el final de su URL para especificar la devolución de llamada.

No he examinado el código fuente de jQuery pero es posible que la función de devolución de llamada no se cree a menos que especifique jsonp para la opción de tipo de datos.

Cuestiones relacionadas