У меня есть просто запуск, изучая 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>
Действительно ли возможно сделать это во-первых? Если так, как?
Из коробки: нет. Это вопрос безопасности. Однако есть несколько различных обходных путей.
Ajax? Да. XHR? Нет (если браузер не реализует Cross-site XHR который пока не получил широкого распространения).
Чтобы получить данные с помощью Ajax без использования XHR, внешний сайт должен предоставить данные в формате JSONP .
В качестве альтернативы вы можете проксировать данные через серверный скрипт на вашем сервере, что делает его исходящим от того же хоста (что касается JavaScript).
Нет, это не так. Посмотрите в То же Политика происхождения . На сайте, который вы пытаетесь запросить, должен быть включен JSONP , чтобы это работало, и вы должны использовать междоменный обратный вызов . В качестве альтернативы вы можете создать прокси-сервер в своем собственном домене, который захватывает страницу от имени вашего запроса ajax.
Вы не можете вызывать Ajax из другого домена. Проверьте технику JSON для этого
Вы не можете выполнять вызовы ajax для домен, отличный от домена, из которого происходит сценарий.
Для этого вы должны использовать прокси-страницу на своей странице, например:
<script>
$(document).ready(function() {
$('#test').load('ajax/getgoogle.php');
});
</script>
getgoogle.php:
<?php
echo file_get_contents("http://www.google.com/");
?>
По соображениям безопасности нельзя использовать AJAX для запроса страницы из другого домена (или протокола, или порта).
Вместо этого вы можете написать серверный сценарий на своем сервере для пересылки запросов в другой домен. (Это невозможно, если вы запускаете страницу из URL-адреса file: //
)
Загрузите этот 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
Вы столкнулись с Политикой одинакового происхождения. Вы не можете получить доступ к данным из внешнего домена с помощью AJAX, это считается риском для безопасности. Это объясняется тем, что запросы AJAX работают с куками, хранящимися в браузере - если я попытаюсь получить доступ к facebook.com, а вы там зарегистрированы, куки будут отправлены, и я получу доступ к вашим личным данным.