Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Odsazení JSON (JSONP) je mechanismus, který umožňuje podporu skriptování napříč webovými stránkami ve webových prohlížečích. JSONP je navržena tak, aby webové prohlížeče načítaly skripty z webu, které se liší od toho, ze které byl načten aktuální načtený dokument. Mechanismus funguje tak, že doplní datovou část JSON uživatelsky definovaným názvem funkce zpětného volání, jak je znázorněno v následujícím příkladu.
callback({"a" = \\"b\\"});
V předchozím příkladu je datová část {"a" = \\"b\\"}JSON zabalena do volání funkce , callback. Funkce zpětného volání musí být již definována na aktuální webové stránce. Typ obsahu odpovědi JSONP je application/javascript.
JSONP není automaticky povolen. Pokud ho chcete povolit, nastavte javascriptCallbackEnabled atribut na true jeden ze standardních koncových bodů HTTP (WebHttpEndpoint nebo WebScriptEndpoint), jak je znázorněno v následujícím příkladu.
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" javascriptCallbackEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Název funkce zpětného volání lze zadat v proměnné dotazu označované jako zpětné volání, jak je znázorněno na následující adrese URL.
http://baseaddress/Service/RestService?callback=functionName
Při vyvolání služba odešle odpověď jako následující.
functionName({"root":"Something"});
Název funkce zpětného volání můžete také určit použitím JavascriptCallbackBehaviorAttribute třídy služby, jak je znázorněno v následujícím příkladu.
[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetData()
{
}
}
U dříve zobrazené služby žádost vypadá podobně jako následující.
http://baseaddress/Service/RestService?$callback=anotherFunction
Při vyvolání služba odpoví následujícím kódem.
anotherFunction ({"root":"Something"});
Stavové kódy HTTP
Odpovědi JSONP s jinými stavovými kódy HTTP než 200 obsahují druhý parametr s číselnou reprezentací stavového kódu HTTP, jak je znázorněno v následujícím příkladu.
anotherFunction ({"root":"Something"}, 201);
Ověření
Při povolení JSONP se provádějí následující ověření:
Infrastruktura WCF vyvolá výjimku, pokud
javascriptCallbackje povolená, je v požadavku k dispozici parametr dotazu zpětného volání a formát odpovědi je nastaven na JSON.Pokud požadavek obsahuje parametr zpětného volání v řetězci dotazu, ale operace není HTTP GET, parametr se ignoruje.
Pokud je
nullnázev zpětného volání nebo prázdný řetězec, odpověď není naformátovaná jako JSONP.