使用AJAX从特定的外部DIV加载文本?
我试图通过使用AJAX加载估计的世界人口,但到目前为止,失败惨重 该页面上有一个ID为“worldnumber”的DIV,其中包含估计的人口,因此这是我想从该页面获取的唯一文本 以下是我尝试过的:使用AJAX从特定的外部DIV加载文本?,ajax,jquery,jquery-load,Ajax,Jquery,Jquery Load,我试图通过使用AJAX加载估计的世界人口,但到目前为止,失败惨重 该页面上有一个ID为“worldnumber”的DIV,其中包含估计的人口,因此这是我想从该页面获取的唯一文本 以下是我尝试过的: $(document).ready(function(){ $("#population").load('http://www.census.gov/ipc/www/popclockworld.html #worldnumber *'); }); 您尝试执行的操作称为跨域请求。这不是
$(document).ready(function(){
$("#population").load('http://www.census.gov/ipc/www/popclockworld.html #worldnumber *');
});
您尝试执行的操作称为跨域请求。这不是一个不支持(安全功能)的功能。这里介绍了一些绕过此限制的方法:。您可以尝试以下方法:
$.get('http://www.census.gov/ipc/www/popclockworld.html', function(content) {
$("#population").html($('#worldnumber',$(content)));
});
是的,这是安全问题。您不能将ajax添加到不来自同一域的页面。@R0MANARMY: 我似乎无法按照你链接到的网站上给出的说明进行操作,但我确实找到了一个解决方案。。。我使用以下代码创建了一个PHP文件:
//Run cURL call
$ch = curl_init('http://www.census.gov/main/www/rss/popclocks.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
//Set as new XML object
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);
function parseRSS($xml) {
$cnt = count($xml->channel->item);
for($i=0; $i<$cnt; $i++) {
$title = $xml->channel->item[$i]->title;
if ( preg_match("/world population estimate:\s([0-9,]+)\s/i", $title, $match) ) {
echo $match[1];
}
}
}
parseRSS($doc);
//运行cURL调用
$ch=curl\u init('http://www.census.gov/main/www/rss/popclocks.xml');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_头,0);
$data=curl\u exec($ch);
卷曲关闭($ch);
//设置为新的XML对象
$doc=新的simplexmlement($data,LIBXML_NOCDATA);
函数parsers($xml){
$cnt=count($xml->channel->item);
对于($i=0;$i通道->项目[$i]->标题;
if(preg_match(“/world population estimate:\s([0-9,]+)\s/i”,$title,$match)){
echo$match[1];
}
}
}
(doc美元);
然后我用jQuery这样称呼它:
<div id="population"></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#population').load('getpop.php');
var refreshId = setInterval(function() {
$('#population').load('getpop.php');
}, 120000);
});
</script>
$(文档).ready(函数(){
$('#population').load('getpop.php');
var refreshId=setInterval(函数(){
$('#population').load('getpop.php');
}, 120000);
});
我想我会把它贴在这里,以防其他人想做类似的事情。我相信浏览器中实施了跨域安全策略,不允许您访问来自不同域的页面上的特定元素。我正在寻找它的详细信息,但我很确定情况就是这样。不,您不能,
get
仍在尝试执行跨域请求,这是大多数浏览器出于安全原因不允许的(jsonp除外).刚刚在Firefox中测试。不起作用。在Safari中起作用,但我感觉这只是因为我的测试页面是从文件系统托管的。我认为Safari在这种情况下可能更宽容。你可以这样做(仍然是ajax请求)对不同域的请求。谢谢,我无法对该站点上的示例进行头尾分析…但是,我确实找到了一个解决方案,我在下面发布了。如果我读对了(不太懂php),您只是创建了一个服务器端代理来代表您处理跨域请求=)。我想。。。我只是想,既然AJAX在访问跨域数据方面存在问题,我就用cURL用PHP抓取数据,然后通过jQuery/AJAX访问数据,而不是试图在AJAXOne中完成所有需要注意的事情(但在您的情况下并不适用)当您创建一个服务器端代理来执行针对其他域的调用时,它可能会使您的应用程序受到攻击。例如,恶意用户可以使用它将信息从当前页面发送到他们自己的服务器(如果当前页面包含密码或诸如此类的内容,则不好)。