Как отправить запрос 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