2010-07-21 10 views
28

Entiendo que jsonp es una técnica para evitar la misma política de origen. Básicamente, se refiere a su punto final del servidor servidor JSON en una etiqueta de script, porque las etiquetas de script están exentas de la política SO.¿Requiere JSONP modificaciones al servidor?

Mi pregunta es: Suponiendo que un servidor tiene un punto final que sirve para json, ¿hay alguna modificación necesaria en el servidor para hacer uso de jsonp en el cliente?

creo que no, pero quiere estar seguro ....

Respuesta

33

Sí, JSONP es ligeramente diferente cuando se hace, por lo que su servidor tiene que apoyarlo.

JSON se ve así:

{ "name": "value" } 

Mientras JSONP se parece a esto:

functionName({ "name": "value" }); 

Si lo que estás usando soportes que usted está cubierto, pero no es lo mismo que acaba de apoyo JSON. Cuando el servidor recibe una petición, por ejemplo: http://example.com/json?callback=functionName, lo anterior es lo que debe hacer, debido a cómo se ve en la página es la siguiente:

<script type="text/javascript" src="http://example.com/json?callback=functionName"></script> 

Esto significa algo que se ejecuta debe devolverse, como una ilustración, esto es válido:

<script type="text/javascript"> 
    functionName({ "name": "value" }); 
</script> 

Si el servidor no hizo JSONP apoyo sería efectivamente esto:

<script type="text/javascript"> 
    { "name": "value" } 
</script> 

... y obtendrá errores de sintaxis, ya que no es JavaScript válido.

+1

y su código js tiene que implementar functionName? ¿Necesita evaluar el json para obtener los objetos js? – hvgotcodes

+0

@hvgotcodes - Sí, el cliente tiene esa función (por ejemplo, jQuery crea una dinámicamente por defecto). Se pasa JSON a la función (JSON es una notación literal de objeto válida, solo un subconjunto de ella), por lo que no es necesario 'eval()'. –

+1

no entiendo por qué no necesita evaluarlo. Independientemente de jsonp, ¿la mayoría de las bibliotecas js no evalúan el json devuelto por xhrs para obtener los objetos js reales que representa el json? – hvgotcodes