使用AJAX从特定的外部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 *'); }); 您尝试执行的操作称为跨域请求。这不是

我试图通过使用AJAX加载估计的世界人口,但到目前为止,失败惨重

该页面上有一个ID为“worldnumber”的DIV,其中包含估计的人口,因此这是我想从该页面获取的唯一文本

以下是我尝试过的:

  $(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中完成所有需要注意的事情(但在您的情况下并不适用)当您创建一个服务器端代理来执行针对其他域的调用时,它可能会使您的应用程序受到攻击。例如,恶意用户可以使用它将信息从当前页面发送到他们自己的服务器(如果当前页面包含密码或诸如此类的内容,则不好)。