Иногда бывает нужно отправить ajax-запрос на другой домен , чтобы динамически подгрузить оттуда данные. Однако, ajax этого сделать не позволяет в целях безопасности. Но в этом материале я покажу, как это ограничение можно обойти.
Иногда бывает нужно отправить ajax-запрос на другой домен, чтобы динамически подгрузить оттуда данные. Однако, ajax этого сделать не позволяет в целях безопасности. Но в этом материале я покажу, как это ограничение можно обойти.
В основе лежит то, что хоть ajax и не позволяет отправлять запрос на другой домен, но PHP позволяет отправлять что угодно и куда угодно. Итак, алгоритм следующий:
- Отправить ajax-запрос скрипту на нашем домене.
- Скрипт на нашем домене отправляет любые запросы на другой домен и получает от него ответ, возвращая его.
- ajax принимает ответ от нашего скрипта с ответом от другого домена.
Вот такой простой алгоритм. Давайте его быстренько реализуем. Значит, сразу ajax:
<script type="text/javascript">
/* Данная функция создаёт кроссбраузерный объект XMLHTTP */
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function send() {
var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
xmlhttp.open('POST', 'test.php', true); // Открываем асинхронное соединение
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
xmlhttp.send("site=" + encodeURIComponent("http://ya.ru/?a=5")); // Отправляем POST-запрос
xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера
if (xmlhttp.readyState == 4) { // Ответ пришёл
if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
document.getElementById("yandex").innerHTML = xmlhttp.responseText; // Выводим ответ сервера
}
}
};
}
</script>
<div>
<input type="button" value="Отправить" />
<div id="yandex"></div>
</div>
А теперь файл test.php, который и занимается отправкой запроса на другой домен:
<?php
echo file_get_contents($_POST["site"]); // Отправляем запрос и выводим ответ
?>
Всё, теперь при нажатии на кнопку "Отправить" у Вас будет открываться страница "http://ya.ru/?a=5". Как видите, отправить ajax-запрос на другой домен не составляет никакого труда.
