Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
JSON Padding (JSONP) to mechanizm, który umożliwia obsługę skryptów między witrynami w przeglądarkach internetowych. JSONP jest zaprojektowane wokół możliwości przeglądarek internetowych do ładowania skryptów z witryny innej niż ta, z której pochodzi obecnie załadowany dokument. Mechanizm działa przez dopełnianie ładunku JSON nazwą funkcji zwrotnej zdefiniowaną przez użytkownika, jak pokazano w poniższym przykładzie.
callback({"a" = \\"b\\"});
W poprzednim przykładzie obiekt {"a" = \\"b\\"} JSON jest opakowany w wywołanie funkcji callback. Funkcja wywołania zwrotnego musi być już zdefiniowana na bieżącej stronie sieci Web. Typ zawartości odpowiedzi JSONP to application/javascript.
Format JSONP nie jest automatycznie włączony. Aby go włączyć, przypisz atrybut javascriptCallbackEnabled wartość true do jednego ze standardowych punktów końcowych HTTP (WebHttpEndpoint lub WebScriptEndpoint), jak pokazano w poniższym przykładzie.
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" javascriptCallbackEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Nazwę funkcji wywołania zwrotnego można określić w zmiennej kwerendy o nazwie wywołanie zwrotne, jak pokazano w poniższym adresie URL.
http://baseaddress/Service/RestService?callback=functionName
Po wywołaniu usługa wysyła odpowiedź podobną do poniższej.
functionName({"root":"Something"});
Możesz również określić nazwę funkcji callback, stosując znacznik JavascriptCallbackBehaviorAttribute w klasie usługi, jak pokazano w poniższym przykładzie.
[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetData()
{
}
}
W przypadku usługi pokazanej wcześniej żądanie wygląda następująco.
http://baseaddress/Service/RestService?$callback=anotherFunction
Po wywołaniu usługa odpowiada za pomocą poniższych instrukcji.
anotherFunction ({"root":"Something"});
Kody stanu HTTP
Odpowiedzi JSONP z kodami stanu HTTP innymi niż 200 zawierają drugi parametr z liczbową reprezentacją kodu stanu HTTP, jak pokazano w poniższym przykładzie.
anotherFunction ({"root":"Something"}, 201);
Sprawdzanie poprawności
Po włączeniu protokołu JSONP są wykonywane następujące walidacje:
Infrastruktura WCF zgłasza wyjątek, jeśli
javascriptCallbackjest włączony, parametr ciągu zapytania zwrotnego jest obecny w żądaniu, a format odpowiedzi jest ustawiony na JSON.Jeśli żądanie zawiera parametr ciągu zapytania wywołania zwrotnego, ale operacja nie jest operacją HTTP GET, to parametr wywołania zwrotnego jest ignorowany.
Jeśli nazwa wywołania zwrotnego to
nulllub pusty ciąg, odpowiedź nie jest sformatowana jako JSONP.