2011-01-13 20 views
10

Estoy haciendo un servicio web que necesita devolver datos en formato JSONP. Estoy usando el taglib de JSON para JSP, y pensé que todo lo que tenía que agregarse eran paréntesis, pero no puedo encontrar un buen recurso que verifique esto.¿Se envían datos JSONP vs. JSON?

Por ejemplo, nunca servicio web devuelve la función utilizando esta función:

private static String getJSONPObject(String s) throws JSONException { 
    return "(" + new JSONObject(s) + ")"; 
} 

¿Es esto correcto?

Gracias!

Respuesta

22

JSONP es simplemente un truco para permitir que las aplicaciones web recuperen datos entre dominios. Podría decirse que viola el Same Origin Policy (SOP). La forma en que funciona es mediante el uso de Javascript para insertar un elemento "script" en su página. Por lo tanto, necesita una función de devolución de llamada. Si no tenía uno, su Javascript no tendría forma de acceder al objeto JSON. Pero al usar JSONP, su código de Javascript puede llamar a la función de devolución de llamada.

Por lo tanto, debe especificar el nombre de la devolución de llamada. Por lo que su función podría tener este aspecto:

private static String getJSONPObject(String callback, String s) throws JSONException { 
    return callback + "(" + new JSONObject(s) + ")"; 
} 
+2

Debe tener acceso al objeto de la solicitud HTTP o al menos alguna forma de acceder a la devolución de llamada que fue enviado, por lo general en esta forma: http://example.com?callback=name123 –

+0

Ya, ya expanda el punto de Abdullah, su código Javascript debería llamar a la función "name123" para obtener el JSON. –

+0

ah, gracias, entiendo la devolución de llamada ahora. sin embargo, no estoy seguro de cómo recuperarlo en el servicio web. Podría pedirlo como un parámetro en mi función, pero eso no parece tan fácil de usar como poder analizarlo en el enlace como ejemplificó Abdullah. específicamente, esto se usa dentro de una clase, y el servicio web le permite a uno acceder a estos métodos. ¿Se puede usar el objeto de solicitud dentro de la clase? – Garrett

Cuestiones relacionadas