JSONP как раз для этой цели
JSONP или "JSON with padding" является дополнением к базовому формату данных JSON, шаблону использования, который позволяет страницезапрашивать данные с сервера в другом домене.В качестве решения этой проблемы JSONP является альтернативой более позднему методу, который называется Cross-Origin Resource Sharing.
Вот очень простой пример реализации JSONP.
код на стороне сервера -
public string GetFirstName()
{
string callback = Request.QueryString["callback"];
string resultJson = "{\"FirstName\": \"archil\"}"; //should definitely be some more application specific data :)
if (!string.IsNullOrEmpty(callback))
{
return string.Format("{0}({1})", callback, resultJson);
}
return resultJson;
}
Этот метод сопоставлен с URL-адресом / GetFirstname на сервере.Это извлекает callback
аргумент из строки запроса.И перенос сгенерированного resultJson как вызов функции javascript, где имя функции - это параметр, переданный с обратным вызовом.
на стороне клиента, с использованием jQuery - реализация так же проста, как
$(function () {
$.ajax('http://serverUrl/GetFirstName', {
dataType: 'JSONP',
jsonpCallback: 'alert'
});
});
.имя alert
в качестве обратного вызова для сервера.Сервер вернет alert({"FirstName": "archil"})
.jQuery автоматически проверит этот ответ и выполнит его.В результате вы получите стандартный экран предупреждения в браузере.Основная идея заключается в том, что alert
будет выполнено, если сервер вернет параметры.Вы можете передать более конкретное имя функции как jsonpCallback и действовать в соответствии с результатами запроса.
Я ЗНАЮ, что используемый здесь шаблон URL больше похож на веб-сервис в стиле RPC, чем на стиль REST, но в примере используется JSONP, а необ архитектуре REST