Могу ли я загрузить данные с внешней страницы через AJAX? - PullRequest
8 голосов
/ 09 марта 2010

Я только начинаю изучать jQuery и AJAX. Я могу загрузить локальную страницу (на моем диске) в div через 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 ]

4 голосов
/ 09 марта 2010

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

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

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

getgoogle.php:

<?php

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

?>
3 голосов
/ 09 марта 2010

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

2 голосов
/ 09 марта 2010

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

2 голосов
/ 09 марта 2010

Ajax? Да. XHR? Нет (если браузер не реализует Межсайтовый XHR , который еще не получил широкого распространения).

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

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

2 голосов
/ 09 марта 2010

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

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

2 голосов
/ 09 марта 2010

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

1 голос
/ 09 марта 2010

Загрузите этот 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

0 голосов
/ 09 марта 2010

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

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