Синхронный перекрестный субдомен запрос POST с jQuery

Я не думаю , debugbar имеет профилировщика.. но это действительно имеет отладчик и консоль..., таким образом, можно фальсифицировать его...

5
задан Mr. Flibble 16 October 2009 в 01:38
поделиться

2 ответа

Вы НЕ МОЖЕТЕ выполнить междоменный запрос (GET / POST и т. Д.) С помощью XMLHttpRequest (также известного как AJAX).

Что вы можете сделать, когда сервер поддерживает это, делает запрос JSONP. Запрос JSONP работает следующим образом:

  • jQuery создает глобально доступную функцию из функции обратного вызова, которую вы предоставляете в качестве аргумента
  • Вместо использования XMLHttpRequest (AJAX) для выполнения HTTP-запроса jQuery динамически вставляет тег SCRIPT в DOM
  • SRC тега скрипта - это URL-адрес запроса, с которым вы пытаетесь связаться.
  • jQuery добавляет параметр обратного вызова в строку запроса, например: example.com/someurl. js? callback = someDynamicallyGeneratedMethodName
  • Затем СЕРВЕР должен вернуть JavaScript, который ваш клиент может использовать, передав результат JSON в качестве аргумента someDynamicallyGeneratedMethodName

Если вы не контролируете сервер, на который вы отправляете сообщение, тогда вам не повезло, JSONP не принесет вам много пользы. Все, что вернет сервер, будет в теге SCRIPT и, скорее всего, выдаст ошибку, если он неправильно отформатирован.

Для получения дополнительной информации я предлагаю вам взглянуть на базовую функцию $ .ajax вместо ярлыков . (В документации jQuery под Ajax. Извините, я не могу разместить больше ссылок)

Опять же, если у вас нет контроля над сервером, на который вы отправляете сообщения, вы можете захотеть изучить прокси, если это возможно. В противном случае единственным вариантом может быть IFRAME. Также есть способ сделать это с помощью объекта SWF (flash). Я не пробовал ни то, ни другое, но это обходные пути к ограничениям объекта XMLHttpRequest.

Надеюсь, я смогу помочь!

26
ответ дан 18 December 2019 в 05:55
поделиться

Вы можете написать сообщение, но вам нужен запрос JSONP, чтобы обойти междоменные проблемы. По сути, вы предоставляете функцию обратного вызова, и запрос возвращается как содержимое сценария, а ваш обратный вызов вызывается с данными JSON из запроса. Сценарий на стороне сервера должен будет предоставить данные обратно в виде вызова функции с помощью функции обратного вызова, обернутой вокруг объекта JSON.

См. Документацию по функции post .

$.post( '/example.com/controller/action?callback=?',
        { param: "data" }, 
        function(data) {
             ...do something with the data...
        }, 'jsonp' );

Действие ASP.NET MVC для этого:

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Action( string param, string callback )
{
     var jsonData = ...do something and construct some data in JSON...

     return Content( callback + "(" + jsonData + ");" );
}
2
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: