<MyRusakov.ru />

React JS, Redux, ES2015 с Нуля до Гуру

React JS, Redux, ES2015 с Нуля до Гуру

Данный курс - это обширный курс по JavaScript и фреймворку React, который позволит Вам с нуля создавать мощные современные, динамические JavaScript-приложения.

Вы узнаете о тонкостях работы с "профессиональным" JavaScript, а так же узнаете о нововведениях в его новый стандарт ES2015, Вы узнаете, как организовать профессиональное окружение для FrontEnd, изучите профессиональный фреймворк - ReactJS.

А в практической части с полного нуля будет создано мощное и быстрое динамическое приложение, где Вы на практике познакомитесь, как создавать очень гибкую и расширяемую архитектуру, для разработке функционала любой сложности.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Отправка 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="Отправить" onclick="send()" />
  <div id="yandex"></div>
</div>

А теперь файл test.php, который и занимается отправкой запроса на другой домен:

<?php
  echo file_get_contents($_POST["site"]); // Отправляем запрос и выводим ответ
?>

Всё, теперь при нажатии на кнопку "Отправить" у Вас будет открываться страница "http://ya.ru/?a=5". Как видите, отправить ajax-запрос на другой домен не составляет никакого труда.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (12):

lev_100rus lev_100rus 10.05.2013 22:04:14

Статьи хорошие. Жаль, что редко только писать стали

Ответить

Admin Admin 11.05.2013 00:38:45

Уже года полтора пишу по 3 статьи в неделю.

Ответить

remox remox 11.07.2013 16:22:33

Забили, что, если кириллицу передавать, то нужно в php файле написать например так - $login = rawurldecode($_POST["login"]); if ($login == "админ") echo "error"; и в курсе Вашем ета деталь тоже упущена)

Ответить

tanysha86 tanysha86 25.01.2014 20:05:33

Подскажите функция try {} catch (e) {} действует как if - else или нет?

Ответить

alexandrdante alexandrdante 25.01.2014 20:36:08

Доброго времени суток По сути да,практически аналогия только это работа с исключениями Советую прочесть: http://www.puzzleweb.ru/javascript/17_try_catch.php

Ответить

mike124 mike124 15.03.2014 14:14:27

Этот Аякс-запрос будет работать только в Windows, или в любой другой ОС тоже.

Ответить

alexandrdante alexandrdante 15.03.2014 14:29:35

AJAX взаимодействует с сервером.Серверные технологии мультиосевые и не имеют отношения к операционной системе

Ответить

mike124 mike124 15.03.2014 14:38:34

Я имел в виду сторону браузера. Просто меня смутил постоянный Microsoft при создании объекта xmlhttp для Аякса.

Ответить

alexandrdante alexandrdante 15.03.2014 14:44:49

это ActiveX WIN систем т.е. видите,там и Microsoft и MsXml2

Ответить

mike124 mike124 15.03.2014 14:51:20

А как такой скрипт адаптировать под Андроид или Linux? Или там все будет работать?

Ответить

master_z1zzz master_z1zzz 20.03.2014 20:55:10

Не получается. Почему то не работает POST. Работает только GET. Что делать?

Ответить

tikkiwiki tikkiwiki 27.03.2014 11:33:35

Владимир, возможно Вы не верно что-то делаете? Это единственная причина.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.