【问题标题】:Load text from specific external DIV using AJAX?使用 AJAX 从特定的外部 DIV 加载文本?
【发布时间】:2010-06-09 00:14:53
【问题描述】:

我正在尝试使用 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 *');
  });

【问题讨论】:

标签: ajax jquery jquery-load


【解决方案1】:

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

【讨论】:

  • 谢谢,我无法对那个网站上的示例做出正面或反面...但是,我确实找到了我在下面发布的解决方案。
【解决方案2】:

你可以试试这样的:

$.get('http://www.census.gov/ipc/www/popclockworld.html', function(content) {
    $("#population").html($('#worldnumber',$(content)));
});

【讨论】:

  • 不,你不能,get 仍在尝试进行跨域请求,大多数浏览器出于安全原因不允许这样做(jsonp 除外)。
  • 刚刚在 Firefox 中测试。不工作。在 Safari 中工作,但我有一种感觉,只是因为我的测试页面是从文件系统托管的。我认为 Safari 在这种情况下可能会更宽容。
【解决方案3】:

是的,这是安全性。您不能 ajax 到不同域的页面。

【讨论】:

  • 可以对不同的域做JSONP(仍然是ajax请求)请求。
【解决方案4】:

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

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

【讨论】:

  • 如果我没看错(不太懂php),你只是创建了一个服务器端代理来代表你处理跨域请求=)。
  • 我想...我只是想,因为 AJAX 在访问跨域数据时存在问题,我只是使用 cURL 来使用 PHP 获取数据,然后通过 jQuery/AJAX 访问该数据,而不是尝试在 AJAX 中完成所有操作
  • 需要注意的一件事(虽然并不真正适用于您的情况)是,当您创建服务器端代理来执行对其他域的调用时,它有可能使您的应用程序受到攻击。例如,恶意用户可以使用它将信息从当前页面发送到他们自己的服务器(如果当前页面包含密码或其他内容,则不好)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多