2012-06-12 11 views
5

Estoy tratando de obtener datos del servidor usando JSONP con el método ajax de jQuery."(Método de devolución de llamada) no está definido" en el acceso JSONP en el complemento de Firefox

$.ajax({ 
    dataType: "jsonp", 
    url: "https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json", 
    type: "GET", 
    data: "msg=aaa", 
    cache: true, 
    jsonp: "jsoncallback", 
    // jsonpCallback: "callbackmethod", 

    success: function(encryptedMsg){ 
     console.log("Encryption success!"); 
    }, 
    error: function(req, errmsg, thrownError) { 
     console.log("Error: HTTP " + req.status + " " + errmsg); 
    } 
}); 

Sin embargo, se muestra siguiente error en la consola de error:

Error: jQuery1720502636097747291_1339479763752 is not defined 
Source File: https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jQuery1720502636097747291_1339479763752&msg=aaa 
Line: 1 

Si abre la URL del archivo fuente, se puede ver la siguiente JSON, y parece JSON correcta.

jQuery1720502636097747291_1339479763752({ 
    "title": "Recent Uploads tagged cat", 
    // ... 
    "items": [ 
    { 
     "title": "Chaton", 
     // ... 
    }, 
    // ... 
    ] 
}) 

También probé para especificar el nombre del método con jsonpCallback: "callbackmethod", pero no funcionó. También usé el método $ .getJson() y jquery-jsonp (http://code.google.com/p/jquery-jsonp/) pero el resultado fue el mismo.

El navegador es Firefox y usa HTML4. Esto se usa en un complemento de Firefox.

Puede leer el código completo aquí: https://builder.addons.mozilla.org/addon/1048275/revision/749
utilizo $ .ajax en función getEncryptedMessage en común: content.js

Gracias de antemano.

+2

Entonces, ¿lo intentó sin especificar la devolución de llamada jsonp? jQuery debería manejar eso por ti. – alexn

+0

Sí, lo he intentado. Traté de acceder a flickr en este código y tengo que especificarlo, pero en realidad quiero acceder a mi propia aplicación web. Intenté acceder sin especificar "jsonp:" cuando utilicé mi propia aplicación de servidor. –

Respuesta

3

No utilice JSONP en las extensiones de Firefox. Si funcionó, sería un problema de seguridad porque permitía que algún servidor web ejecutara código en el contexto de su extensión. En su caso, no funciona, sin embargo, porque content scripts don't access the web page directly. El script JSONP se ejecuta en el contexto de la página web y no puede ver las funciones definidas por el script de contenido.

Debe utilizar el request module para realizar solicitudes a cualquier servidor web, es compatible con el formato JSON. No puede usarlo desde un script de contenido, por supuesto, pero puede enviar un mensaje de vuelta a la extensión, la extensión debe hacer la solicitud y enviar la respuesta del servidor nuevamente al script de contenido. Consulte la documentación en communicating with content scripts.

+0

Oh ... JSONP estaba mal en las extensiones de Firefox. OK, intentaré solicitarlo. ¡Gracias! –

Cuestiones relacionadas