Иногда бывает нужно отправить ajax-запрос на другой домен , чтобы динамически подгрузить оттуда данные. Однако, ajax этого сделать не позволяет в целях безопасности. Но в этом материале я покажу, как это ограничение можно обойти.

Отправка ajax-запроса на другой домен

Иногда бывает нужно отправить ajax-запрос на другой домен, чтобы динамически подгрузить оттуда данные. Однако, ajax этого сделать не позволяет в целях безопасности. Но в этом материале я покажу, как это ограничение можно обойти.

В основе лежит то, что хоть ajax и не позволяет отправлять запрос на другой домен, но PHP позволяет отправлять что угодно и куда угодно. Итак, алгоритм следующий:

  1. Отправить ajax-запрос скрипту на нашем домене.
  2. Скрипт на нашем домене отправляет любые запросы на другой домен и получает от него ответ, возвращая его.
  3. 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-запрос на другой домен не составляет никакого труда.