Что мешает мне использовать $ .ajax для загрузки html другого домена? - PullRequest
2 голосов
/ 20 января 2012

Мой домен:

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'html',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

Что мешает мне очистить их домен? Любая работа вокруг?

Приложение: спасибо всем за предложения по использованию серверного скрипта, но на данный момент я заинтересован в решении этой проблемы исключительно с помощью клиента.

Если я отформатирую запрос, используя «jsonp», я получу ответ, но со следующей ошибкой: «Uncaught SyntaxError: Неожиданный токен <». Так что я получаю ответ от их домена, но парсер ожидает, что это будет json. (Так и должно быть.) Я пытаюсь понять, является ли это способом обмануть клиента в принятии этого ответа. Пожалуйста, поймите, что я знаю, что это нетипично. </p>

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'jsonp',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

Ответы [ 4 ]

6 голосов
/ 20 января 2012

Существует четыре способа обойти Одинаковая политика происхождения

  1. Прокси-сервер - вы запрашиваете его со своего сервера, ваш сервер запрашивает его из другого домена, ваш сервер возвращает его вбраузер
  2. Flash-политика кросс-доменов - другой домен должен добавить файл crossdomain.xml на свой сайт
  3. HTTP-заголовок междоменного домена - другой домендолжен добавить заголовок Access-Control-Allow-Origin на свою страницу
  4. JSONP - это веб-сервис json, который предоставляет функцию обратного вызова.Другой домен должен реализовать это.

Примечание: ONLY способ сделать это без помощи другого домена - это # ​​1, маршрутизируя его через ваш собственный сервер.

2 голосов
/ 20 января 2012

Политика Same Origin запрещает сценариям на стороне клиента получать данные из доменов, которые не отправлены запросомВам понадобится серверный скрипт, который будет действовать как прокси

2 голосов
/ 20 января 2012

Это Одинаковая политика происхождения , которая предотвращает междоменные запросы.Если вы хотите очистить html, вам лучше написать процесс на стороне сервера для получения контента, а затем использовать ajax для запроса к вашему серверу, который содержит собранные данные.

0 голосов
/ 20 января 2012

Один из обходных путей - создать серверный скрипт (например, PHP), чтобы получить страницу, и заставить $.ajax вызвать его.

...