Compartir a través de


Uso de JSONP

El relleno JSON (JSONP) es un mecanismo que permite la compatibilidad con scripts entre sitios en exploradores web. JSONP está diseñado en torno a la capacidad de los exploradores web de cargar scripts desde un sitio diferente del que se recuperó el documento cargado actual. El mecanismo funciona rellenando la carga JSON con un nombre de función de devolución de llamada definido por el usuario, como se muestra en el ejemplo siguiente.

callback({"a" = \\"b\\"});

En el ejemplo anterior, la carga JSON, {"a" = \\"b\\"}, se ajusta en una llamada de función, callback. La función de devolución de llamada ya debe definirse en la página web actual. El tipo de contenido de una respuesta JSONP es application/javascript.

JSONP no está habilitado automáticamente. Para habilitarlo, establezca el javascriptCallbackEnabled atributo true en en uno de los puntos de conexión estándar HTTP (WebHttpEndpoint o WebScriptEndpoint), como se muestra en el ejemplo siguiente.

<system.serviceModel>
  <standardEndpoints>
    <webHttpEndpoint>
      <standardEndpoint name="" javascriptCallbackEnabled="true"/>
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

El nombre de la función de devolución de llamada se puede especificar en una variable de consulta denominada devolución de llamada, como se muestra en la siguiente dirección URL.

http://baseaddress/Service/RestService?callback=functionName

Cuando se invoca, el servicio envía una respuesta similar a la siguiente.

functionName({"root":"Something"});

También puede especificar el nombre de la función de devolución de llamada aplicando a JavascriptCallbackBehaviorAttribute la clase de servicio, como se muestra en el ejemplo siguiente.

[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
    [OperationContract]
    [WebGet(ResponseFormat=WebMessageFormat.Json)]
    public string GetData()
    {
    }
}

Para el servicio mostrado anteriormente, una solicitud es similar a la siguiente.

http://baseaddress/Service/RestService?$callback=anotherFunction

Cuando se invoca, el servicio responde con lo siguiente.

anotherFunction ({"root":"Something"});

Códigos de estado HTTP

Las respuestas JSONP con códigos de estado HTTP distintos de 200 incluyen un segundo parámetro con la representación numérica del código de estado HTTP, como se muestra en el ejemplo siguiente.

anotherFunction ({"root":"Something"}, 201);

Validaciones

Las siguientes validaciones se realizan cuando se habilita JSONP:

  • La infraestructura de WCF produce una excepción si javascriptCallback está habilitada, un parámetro de cadena de consulta de devolución de llamada está presente en la solicitud y el formato de respuesta se establece en JSON.

  • Si la solicitud contiene el parámetro de cadena de consulta de devolución de llamada, pero la operación no es HTTP GET, se omite el parámetro de devolución de llamada.

  • Si el nombre de la devolución de llamada es null o la cadena vacía, la respuesta no tiene el formato JSONP.

Consulte también