Uso di JSONPUsing JSONP

JSON Padding (JSONP) è un meccanismo che abilita il supporto di script tra siti nei Web browser.JSON Padding (JSONP) is a mechanism that enables cross-site scripting support in Web browsers. JSONP è progettato sulla base della capacità dei Web browser di caricare script da un sito diverso rispetto a quello da cui è stato recuperato il documento attualmente caricato.JSONP is designed around the ability of Web browsers to load scripts from a site different from the one the current loaded document was retrieved from. Il meccanismo funziona riempiendo il payload JSON con un nome di funzione di callback definito dall'utente, come indicato nell'esempio seguente.The mechanism works by padding the JSON payload with a user-defined callback function name, as shown in the following example.

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

Nell'esempio precedente viene eseguito il wrapping del payload JSON, {"a" = \\"b\\"}, in una chiamata di funzione, callback.In the preceding example the JSON payload, {"a" = \\"b\\"}, is wrapped in a function call, callback. La funzione di callback deve essere già definita nella pagina Web corrente.The callback function must already be defined in the current Web page. Il tipo di contenuto di una risposta JSONP è application/javascript.The content type of a JSONP response is application/javascript.

JSONP non è automaticamente abilitato.JSONP is not automatically enabled. Per abilitarlo, impostare l'attributo javascriptCallbackEnabled su true in uno degli endpoint HTTP standard (WebHttpEndpoint o WebScriptEndpoint), come indicato nell'esempio seguente.To enable it, set the javascriptCallbackEnabled attribute to true on one of the HTTP standard endpoints (WebHttpEndpoint or WebScriptEndpoint), as shown in the following example.

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

È possibile specificare il nome della funzione di callback in una variabile della query denominata callback, come indicato nell'URL seguente.The name of the callback function can be specified in a query variable called callback as shown in the following URL.

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

Se richiamato, il servizio invia una risposta analoga alla seguente.When invoked, the service sends a response like the following.

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

È inoltre possibile specificare il nome della funzione di callback applicando JavascriptCallbackBehaviorAttribute alla classe di servizio, come indicato nell'esempio seguente.You can also specify the callback function name by applying the JavascriptCallbackBehaviorAttribute to the service class, as shown in the following example.

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

Per il servizio mostrato in precedenza, una richiesta è analoga alla seguente.For the service shown previously, a request looks like the following.

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

Se richiamato, il servizio risponde come segue.When invoked, the service responds with the following.

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

Codici di stato HTTPHTTP Status Codes

Le risposte JSONP con codici di stato HTTP diversi da 200 includono un secondo parametro con la rappresentazione numerica del codice di stato HTTP, come indicato nell'esempio seguente.JSONP responses with HTTP status codes other than 200 include a second parameter with the numeric representation of the HTTP status code, as shown in the following example.

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

ConvalideValidations

Se JSONP è abilitato, vengono eseguite le convalide indicate di seguito.The following validations are performed when JSONP is enabled:

  • L'infrastruttura WCF genera un'eccezione se javascriptCallback è abilitato, è presente un parametro della stringa di query di callback nella richiesta e il formato della risposta è impostato su JSON.The WCF infrastructure throws an exception if javascriptCallback is enabled, a callback query-string parameter is present in the request and the response format is set to JSON.

  • Se la richiesta contiene il parametro della stringa di query di callback ma l'operazione non è un'operazione HTTP GET, il parametro di callback viene ignorato.If the request contains the callback query string parameter but the operation is not an HTTP GET, the callback parameter is ignored.

  • Se il nome del callback è null o una stringa vuota, la risposta non è formattata come JSONP.If the callback name is null or empty string the response is not formatted as JSONP.

Vedere ancheSee also

Panoramica del modello di programmazione HTTP Web di WCFWCF Web HTTP Programming Model Overview