我刚开始学习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>
首先可以做到这一点吗?如果是这样,怎么样?
答案 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技术