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

我刚开始学习jQuery和AJAX。 我可以通过jQuery.load()将本地页面(在我的磁盘上)加载到div中,但外部站点似乎不起作用。 我甚至使用wireshark检查数据是否从服务器发送(它是)。 示例代码如下:

     $(document).ready(function() { // $('#test').load('localpage.htm'); works! $('#test').load('http://www.google.com/'); // does not work! });    

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

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

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

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

  

getgoogle.php:

  

你正在遇到同源政策 。 您无法使用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技术