Как отправить запрос AJAX на другой порт с помощью jQuery? - PullRequest
36 голосов
/ 20 января 2010

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

Ответы [ 3 ]

41 голосов
/ 20 января 2010

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

Вы можете использовать JSONP в качестве Doug , предложенного.установить очень простой обратный прокси (используя mod_proxy , если вы используете Apache).Это позволит вам использовать относительные пути в вашем AJAX-запросе, в то время как HTTP-сервер будет действовать как прокси для любого «удаленного» местоположения.

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

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

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

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

31 голосов
/ 20 января 2010

Вы не можете 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 голосов
/ 20 января 2010

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

Если вы ориентируетесь в основном на новые браузеры, такие как 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...