получить HTML внешнего URL в JQuery - PullRequest
16 голосов
/ 01 октября 2010

Как я могу получить HTML-код внешнего URL с помощью jquery?

Ответы [ 6 ]

19 голосов
/ 01 октября 2010

Короткий ответ: вы не можете, потому что запросы AJAX ограничены тем же (суб) доменом и портом в соответствии с Одинаковой политикой происхождения .

Те же ограничения применяются к iframe элементов: Вы не можете создать iframe, указывающий на внешнюю страницу, и получить оттуда ее HTML.

Обычным способом является использование серверного скрипта (написанного, например, на PHP), который служит прокси: он выбирает контент внешнего сайта и возвращает его обратно в JavaScript.Он должен работать в том же домене, что и страница.

Очевидно, что при использовании этого решения относительные ссылки на URL-адреса, изображения, таблицы стилей и т. Д. (Например, ../images/image.gif) больше не будут работать, так как их нетконтекст на вашей странице.Является ли это проблемой в вашей ситуации, невозможно сказать.Одним из способов решения этой проблемы может быть использование тега <base> .

6 голосов
/ 01 октября 2010

Вам нужно jquery $.get

http://api.jquery.com/jQuery.get/

Пример: оповещение о результатах запроса test.cgi с дополнительной полезной нагрузкой данных (HTML или XML, в зависимости от того, что было возвращено).

$.get("test.cgi", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

Изменить: это работает, только если ваша страница находится в том же домене.

3 голосов
/ 01 октября 2010

Вы можете использовать $ .ajax или $ .get для вызова URL-адреса в вашем собственном домене, а затем использовать любой серверный язык, который вы используете для получения HTML-кода, а затем вернуть его.

Это два HTTP-запроса вместо одного, но это решит вашу проблему.

Вы также можете кэшировать HTML внешних сайтов в своем бэкэнд-коде, чтобы запрос из Javascript не всегда приводил к двум HTTP-запросам - конечно, все зависит от того, как часто будет меняться HTML-код, который вы хотите получить.

Небольшой поворот в вышесказанном состоит в том, чтобы на вашем сервере работала фоновая задача, которая извлекает внешний HTMl каждые X секунд и сохраняет его локально. Запросы на ваш домен от вашего JS просто забрать последнюю копию с вашего сервера. Это означает, что ваш JS-запрос не замедляется ожиданием другого внешнего HTTP-запроса.

3 голосов
/ 01 октября 2010

В простейшей форме - Вы не можете.

Вы связаны той же политикой происхождения .

1 голос
/ 01 октября 2010

Все распространенные браузеры не разрешают вызовам Javasript доступ к любым страницам с другим (суб) доменом из-за единой политики происхождения. Единственный способ обойти это - установить на своем сервере какой-то «прокси» (например, php Script), работающий в том же домене, получить необходимую информацию из третьего источника и распечатать ее.

0 голосов
/ 01 октября 2010

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

Затем вы можете вызывать прокси на стороне сервера с помощью URL, используяAjax, который вернет вам HTMl этой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...