繁体   English   中英

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

[英]Can I load data from an external page via 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>

首先可以做到这一点吗? 如果是这样,怎么样?

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

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

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

getgoogle.php:

<?php

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

?>

开箱即用:没有。 这是一个安全问题。 但是有一些 不同的 解决方法

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

出于安全原因,您不能使用AJAX从不同的域(或协议或端口)请求页面。

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

阿贾克斯? 是。 XHR? (除非浏览器实现了尚未普及的跨站点XHR )。

要在不使用XHR的情况下使用Ajax获取数据,外部站点必须提供JSONP格式的数据。

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

不,这不对。 看看同源政策 您尝试请求的站点需要启用JSONP才能工作,并且您将使用跨域回调 或者,您可以在自己的域上创建代理,代表您的ajax请求抓取页面。

加载此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解决方案

您无法从其他域调用Ajax。 检查JSON技术

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM