2

我正在尝试使用 AJAX 从http://www.census.gov/ipc/www/popclockworld.html加载估计的世界人口,但到目前为止,失败得很惨。

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

这是我尝试过的:

  $(document).ready(function(){
    $("#population").load('http://www.census.gov/ipc/www/popclockworld.html #worldnumber *');
  });
4

4 回答 4

4

您尝试执行的操作称为跨域请求。这不是浏览器通常允许的功能(安全功能)。此处描述了一些绕过此限制的方法:The jQuery Cross-Domain Ajax Guide

于 2010-06-09T00:21:24.077 回答
0

你可以尝试这样的事情:

$.get('http://www.census.gov/ipc/www/popclockworld.html', function(content) {
    $("#population").html($('#worldnumber',$(content)));
});
于 2010-06-09T00:26:11.043 回答
0

对,就是安全。您不能 ajax 到不来自同一个域的页面。

于 2010-06-09T00:27:30.417 回答
0

@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);

然后我像这样用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>

只是想我会把它贴在这里,以防其他人想做类似的事情。

于 2010-06-09T17:47:31.370 回答