|
Programmer ASP.NET MVC C# |
Programming
|
||
Предыдущий | Следующий | |
JSONP (JSON with padding) - это дополнение к базовому формату JSON, основное предназначение которого делать междоменные запросы. Стандартными средствами обмена данными междоменные запросы запрещены из-за политики безопасности. Суть формата, что сервер при запросе JSONP возвращает не JSON, а произвольный JavaScript-код. Этот скрипт обрабатываются интерпретатором JavaScript, а не парсером JSON. Грубо говоря сервер вернет JavaScript, который браузер выполнит. Расмотри пример, реализации посредством jquery и asp.net mvc Для этой цели я использую метод getJSON: $.getJSON("otherdomain.com?callback=MyCallback", { MyParam: "Value" }); function MyCallback(data) { Обратите внимания на url запроса. Мы методом GET передаем названия функции (MyCallback), которая будет вызвана после возврата данных из сервера. Что бы не плодить много функций, jquery упрощает вызов, до такой конструкции: $.getJSON("otherdomain.com?callback=?", { MyParam: "Value" }, function (data) { Параметр "?" означает что название функции будет генерироваться автоматически. Этот пример я рекомендую использовать. Теперь перейдем к серверной части. Серверный код должен принимать параметр callback и возвращать не JSON, а JavaScript-код (и то в определенном формате). Создаем свой ActionResult. Я наследуюсь от ContentResult, что бы не было не каких лишних данных в ответе: public class JsonpResult : ContentResult Конструктор (JsonpResult(string callback, object data) ) у меня принемает два параметра - это функцию, которая должна вызываться, и данные, которые мы хотим вернуть. Далее я формирую JavaScript, который сервер и верне. Если бы мы использовали обычный запрос, то сервер вернул бы данные в формате: { JSONP должен возвращать эти данные так: MyCallback({ Теперь перейдем к Controller public class HomeController : Controller На этом все, если вместо jquery используется другой framework, то там тоже должны быть аналогичные функции. Пример для angularjs: $http.jsonp("otherdomain.com?callback=JSON_CALLBACK", Главное не стоит забывать, что все параметры при таком запросе передаються методом GET |