Partager via


Utilisation de JSONP

JSON Padding (JSONP) est un mécanisme qui permet la prise en charge des scripts entre sites dans les navigateurs Web. JSONP est conçu autour de la capacité des navigateurs Web à charger des scripts à partir d’un site différent de celui à partir duquel le document chargé actuel a été récupéré. Le mécanisme fonctionne en remplissage de la charge utile JSON avec un nom de fonction de rappel défini par l’utilisateur, comme illustré dans l’exemple suivant.

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

Dans l’exemple précédent, la charge utile JSON est {"a" = \\"b\\"}encapsulée dans un appel de fonction. callback La fonction de rappel doit déjà être définie dans la page Web active. Le type de contenu d’une réponse JSONP est application/javascript.

JSONP n’est pas activé automatiquement. Pour l’activer, définissez l’attribut javascriptCallbackEnabledtrue sur l’un des points de terminaison standard HTTP (WebHttpEndpoint ou WebScriptEndpoint), comme illustré dans l’exemple suivant.

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

Le nom de la fonction de rappel peut être spécifié dans une variable de requête appelée rappel, comme indiqué dans l’URL suivante.

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

Lorsqu’il est appelé, le service envoie une réponse semblable à ce qui suit.

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

Vous pouvez également spécifier le nom de la fonction de rappel en appliquant JavascriptCallbackBehaviorAttribute à la classe de service, comme montré dans l’exemple suivant.

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

Pour le service indiqué précédemment, une requête ressemble à ce qui suit.

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

Lorsqu’il est appelé, le service répond avec les éléments suivants.

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

Codes d’état HTTP

Les réponses JSONP avec des codes d’état HTTP autres que 200 incluent un deuxième paramètre avec la représentation numérique du code d’état HTTP, comme illustré dans l’exemple suivant.

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

Vérifications

Les validations suivantes sont effectuées lorsque JSONP est activé :

  • L’infrastructure WCF lève une exception si javascriptCallback est activé, qu'un paramètre de chaîne de requête de rappel est présent dans la demande et que le format de réponse est défini sur JSON.

  • Si la requête contient le paramètre de chaîne de requête de rappel, mais que l’opération n’est pas une requête HTTP GET, le paramètre de rappel est ignoré.

  • Si le nom de rappel est null ou une chaîne vide, la réponse n’est pas mise en forme en tant que JSONP.

Voir aussi