Как отправить запрос AJAX на другой порт с помощью jQuery?

Мне нужно отправить запрос AJAX, например, на порт 8080, где там работает демон.

Ответы

Ответ 1

Вы не можете передать POST информацию о перекрестном домене, субдомене или номере порта. Однако вы можете использовать JSONP, если у вас есть доступ как к демону, так и к запрашивающему сайту. Если данные должны быть возвращены, то daemon должен поддерживать параметр запроса callback и корректно отформатировать его.

Передайте информацию демону:

$.getJSON('http://domain.com:8080/url/here?callback=?', {
  key: 'value',
  otherKey: 'otherValue'
}, function(data){
     // Handles the callback when the data returns
});

Теперь просто убедитесь, что ваш демон обрабатывает параметр callback. Например, если callback=mycallback возвращение от демона (единственное, что написано на странице) должно выглядеть так:

Для пар ключ/значение:

mycallback( {'returnkey':'returnvalue', 'other':'data' });

Для массива:

mycallback( [1,2,3] );

Если у вас нет JSONP или аналогичного механизма, вы не можете связывать кросс-домен с помощью jQuery.

Ответ 2

Это нарушает То же правило происхождения. Вы не можете использовать другой порт, даже если используете тот же домен.

Вы можете использовать JSONP в качестве Doug.

Или иначе, как еще одно возможное обходное решение, вы можете настроить очень простой обратный прокси (используя mod_proxy, если вы находитесь в Apache). Это позволит использовать относительные пути в вашем запросе AJAX, в то время как HTTP-сервер будет действовать как прокси-сервер в любом местоположении "remote".

Основная директива конфигурации для настройки обратного прокси-сервера в mod_proxy - это ProxyPass. Обычно вы используете его следующим образом:

ProxyPass     /ajax/     http://www.localhost:8080/

В этом случае вы запросите /ajax/test.xml с помощью jQuery, но на самом деле сервер будет обслуживать это, действуя как прокси-сервер для http://www.localhost:8080/test.xml внутри.

Если вы используете IIS, вы можете использовать Managed Fusion URL Rewriter и Reverse Proxy для настройки обратного прокси.

Ответ 3

Это считается другим происхождением, даже если у вас есть его в том же окне, только в другом порту.

Если вы нацеливаете главным образом новые браузеры, такие как FireFox 3.5 и выше, вы можете попробовать добавить заголовки Access-Control к вашему приложению в другом порту и разрешить звонить из пула приложений по умолчанию. Информацию о заголовках управления доступом можно найти здесь: https://developer.mozilla.org/en/HTTP_access_control

IE также реализует его (опять же, используя другой элемент управления ACTIVEX, почему?): http://blogs.msdn.com/ie/archive/2009/01/14/completing-access-control-support-for-xdomainrequest.aspx и http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx