Я могу загрузить данные из внешней страницы через Ajax?

У меня есть просто запуск, изучая jQuery и Ajax. Я могу загрузить локальную страницу (на моем диске) в отделение через jQuery.load(), но внешние сайты, кажется, не работают. Я даже использовал wireshark, чтобы проверить, отправляются ли данные от сервера (это). Пример кода ниже:

<html>
<head>
    <script src='jquery-1.4.2.min.js'></script>
    <script>
        $(document).ready(function() {
            // $('#test').load('localpage.htm'); works!
            $('#test').load('http://www.google.com/'); // does not work!
        });
    </script>
</head>
<body>
<div id='test'></div>
</body>
</html>

Действительно ли возможно сделать это во-первых? Если так, как?

8
задан int3 9 March 2010 в 14:14
поделиться

8 ответов

Из коробки: нет. Это вопрос безопасности. Однако есть несколько различных обходных путей.

3
ответ дан 5 December 2019 в 10:40
поделиться

Ajax? Да. XHR? Нет (если браузер не реализует Cross-site XHR который пока не получил широкого распространения).

Чтобы получить данные с помощью Ajax без использования XHR, внешний сайт должен предоставить данные в формате JSONP .

В качестве альтернативы вы можете проксировать данные через серверный скрипт на вашем сервере, что делает его исходящим от того же хоста (что касается JavaScript).

2
ответ дан 5 December 2019 в 10:40
поделиться

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

2
ответ дан 5 December 2019 в 10:40
поделиться

Вы не можете вызывать Ajax из другого домена. Проверьте технику JSON для этого

0
ответ дан 5 December 2019 в 10:40
поделиться

Вы не можете выполнять вызовы ajax для домен, отличный от домена, из которого происходит сценарий.

Для этого вы должны использовать прокси-страницу на своей странице, например:

<script>
    $(document).ready(function() {
        $('#test').load('ajax/getgoogle.php');
    });
</script>

getgoogle.php:

<?php

echo file_get_contents("http://www.google.com/");

?>
4
ответ дан 5 December 2019 в 10:40
поделиться

По соображениям безопасности нельзя использовать AJAX для запроса страницы из другого домена (или протокола, или порта).

Вместо этого вы можете написать серверный сценарий на своем сервере для пересылки запросов в другой домен. (Это невозможно, если вы запускаете страницу из URL-адреса file: // )

2
ответ дан 5 December 2019 в 10:40
поделиться

Загрузите этот PHP-скрипт вместо попытки загрузить сайт напрямую

$filename = "http://www.sitename.com";
$handle = fopen($filename, "r");
if ($handle)
{
    while (!feof($handle))
    {
        $text .= fread($handle, 128);
    }
    fclose($handle);
}
print $text;

Изменить: Или просто как решение прихвостня с file_get_contents

1
ответ дан 5 December 2019 в 10:40
поделиться

Вы столкнулись с Политикой одинакового происхождения. Вы не можете получить доступ к данным из внешнего домена с помощью AJAX, это считается риском для безопасности. Это объясняется тем, что запросы AJAX работают с куками, хранящимися в браузере - если я попытаюсь получить доступ к facebook.com, а вы там зарегистрированы, куки будут отправлены, и я получу доступ к вашим личным данным.

2
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: