JQuery AJAX POST через .NET - возвращение JSONP - PullRequest
2 голосов
/ 07 февраля 2012

Мне нужно сделать ajax-публикацию в веб-сервис .NET в другом домене. Могу ли я установить любые возвращаемые данные, поступающие с сервера, на jsonp и использовать js для чтения данных? Я сталкивался с этим решением при публикации в сервис .NET:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

$.ajax({
  type: "POST",
  url: "PageName.aspx/MethodName",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

Я использовал это раньше с большим успехом, однако мои звонки всегда были в пределах одного домена. Теперь, когда я хотел бы опубликовать междоменный домен (это вообще возможно?), Могут ли возвращаемые данные быть в jsonp, чтобы избежать каких-либо междоменных проблем.

Обычно, когда я делаю GET-запросы междоменные, скажем, API, я обычно использую "script" в качестве своего dataType в вызове ajax и анализирую данные с помощью функции обратного вызова за пределами успеха функция ajax.

Можно ли использовать "script" в качестве dataType в приведенном выше вызове или как мне поступить с этим вызовом и по-прежнему обрабатывать возвращаемые данные как JSONP для чтения внутри функции обратного вызова?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2012

формат данных возвращаемых данных определяется API на стороне сервера.Некоторые API предоставляют формат jsonp.Ищите документацию по API.На стороне клиента, выполняющего вызов (если у вас нет API), у вас нет доступа к нему.

0 голосов
/ 07 февраля 2012

JSONP не является AJAX.

AJAX использует интерфейс XHR браузера для создания отдельного HTTP-запроса с ограничением, что цель XHR имеет то же происхождение, что и страница, инициирующая XHR.

JSONP, с другой стороны, является хаком, который стал стандартом.JSONP является эквивалентом ... <script src="http://api.yoursite.com/whatever/call.json?callback=asdf

Где возвращаемый файл на самом деле является просто javascript, который выглядит как ... asdf({ ... json data ... });

Вот и все, чтобы добраться до этого очень важного момента:

Вы не можете выполнять междоменную процедуру AJAX POST, а также не можете выполнять POST с JSONP.Зачем?JSONP - это GET только потому, что он основан на теге <script>.

Для этого существует несколько способов обхода, самый простой - это, вероятно, метод локального прокси, где вы настраиваете страницу на своем сервере, которая делает APIзапрос на сторонний домен на стороне сервера, затем возвращает результаты «локально».

0 голосов
/ 07 февраля 2012

При использовании jsonp необходимо указать имя обратного вызова в качестве параметра строки запроса url.Это имя функции, которая будет вызываться на стороне клиента при возврате данных.На стороне сервера вы должны сделать что-то вроде этого:

if request.GET.has_key('callback'):
    callbackName=request.GET['callback']
    str="%s(%s)"%(callbackName,str)
return HttpResponse(str, mimetype='application/javascript')

Для получения дополнительной информации прочитайте http://api.jquery.com/jQuery.ajax/ и найдите jsonp на странице.

ps: очевидно, мой фрагментв Python, но это тот же принцип.

...