Если вам необходимо получить доступ к веб-сервис, используя Ajax, что работает на сервере, который не в домене, то вы будете сталкиваться с "ту же политику происхождения" [1], что поможет предотвратить получение данных из-за пределов собственный домен по соображениям безопасности. Там должно быть какой-то способ обойти это ограничение на те случаи, когда веб-сервис является доверенным.
Наиболее распространенный способ обойти ту же политику происхождения в реализации Ajax является получение доступа к удаленным веб-службы с помощью прокси работает в вашей области. Прокси использует библиотеку HTTP клиента (например [2]), для доступа к удаленным сервером. Этот метод, как правило, достаточно простой, но более жестко, если удаленный сервер требует проверки подлинности или использует куки для отслеживания состояния между запросами. С положительной стороны, используя прокси обычно облегчает кэш Ajax ответы, что-то, что, как правило, довольно сложно.
Чтобы добавить простой прокси для компонента Joomla нужно просто добавить дополнительные задачи на контроллер. Следующий код показывает примерно то, что это может выглядеть, с учетом статического клиента HTTP класс, называемый HttpClient с методом, который будет запрашивать страницы с удаленного сервера.
<?php
/**
* Support cross-domain Ajax request by using the component as a proxy.
* To use this facility replace "option" with "type" and "task" with "request"
* in the query that would otherwise be sent to the remote server.
*/
function proxy()
{
$uri = & JFactory::getURI();
$query = $uri->getQuery( true );
$query['option'] = $query['type'];
unset( $query['type']);
unset( $query['task']);
if (isset( $query['request'] )) {
$query['task'] = $query['request'];
unset( $query['request']);
}
// Make the API call.
$response = httpClient::call( $query );
if ($response->status != '200') {
JError::raiseError( 500, JText::_( 'Remote server error' ) );
return false;
}
// And return the response.
echo $response->data;
jexit();
}
Этот пример также показывает, как обойти ситуацию, когда удаленный сервер также работает Joomla, в этом случае он потребует URL содержащий опции и задачи аргументы, которые могут не совпадать требуется прокси-сервер. Например, предположим, вы хотите сделать запрос Ajax на удаленном сервере, используя эту ссылку:
http://www.remoteserver.com/index.php?option=com_remotecomponent&task=remotetask&arg=something
Чтобы избежать той же политики происхождения вы послать запрос на прокси вместо использования этого URL:
http://www.localserver.com/index.php?option=com_localcomponent&task=proxy&type=com_remotecomponent&request=remotetask&arg=something
Вам нужно будет адаптировать этот код в соответствии с вашими конкретными требованиями, например, если вам нужно указать контроллер для достижения прокси.
Добавление куки и кэш поддержка остается в качестве упражнения для читателя.
