我可以通过AJAX从外部页面加载数据吗?

时间:2010-03-09 14:14:39

标签: javascript jquery ajax

我刚开始学习jQuery和AJAX。我可以通过jQuery.load()将本地页面(在我的磁盘上)加载到div中,但外部站点似乎不起作用。我甚至使用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 个答案:

答案 0 :(得分:4)

您不能对脚本来源的其他域执行ajax调用。

为了做这样的事情,你必须在你自己的页面上使用代理页面,例如:

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

getgoogle.php:

<?php

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

?>

答案 1 :(得分:3)

开箱即用:没有。这是一个安全问题。虽然有few different workarounds

答案 2 :(得分:2)

你正在遇到Same Origin Policy。您无法使用AJAX从外部域访问数据,这被视为安全风险。其背后的原因是AJAX请求使用浏览器存储的cookie - 如果我尝试访问facebook.com,并且您已登录,那么cookie将被发送,我可以访问您的个人数据。 / p>

答案 3 :(得分:2)

出于安全原因,您无法使用AJAX从其他域(或协议或端口)请求页面。

相反,您可以在服务器上编写服务器端脚本以将请求转发到另一个域。 (如果您从file://网址运行页面

,则无法执行此操作)

答案 4 :(得分:2)

的Ajax?是。 XHR? No(除非浏览器实现了尚未普及的Cross-site XHR)。

要使用Ajax获取数据而不使用XHR,外部网站必须提供JSONP format中的数据。

或者,您可以通过服务器上的服务器端脚本代理数据,从而使其来自同一主机(就JavaScript而言)。

答案 5 :(得分:2)

不,不是。看看Same Origin Policy。您尝试申请的网站需要启用JSONP才能生效,您可以使用cross-domain callback。或者,您可以在自己的域上创建代理,代表您的ajax请求抓取页面。

答案 6 :(得分:1)

加载此PHP脚本,而不是尝试直接加载网站

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

编辑:或者只是喜欢henchman的解决方案 file_get_contents

答案 7 :(得分:0)

您无法从其他域调用Ajax。检查此

的JSON技术
相关问题