如何从JavaScript加载外部XML?

时间:2013-07-12 15:23:46

标签: javascript xml

我有问题。我想加载一个XML文件并从中提取特定节点,以便使用JavaScript进行显示。

我找到了以下教程:http://www.w3schools.com/dom/dom_nodes_get.asp

基于此我尝试了自己的,但它不起作用,我不知道我做错了什么。

所以基本上我想在XML文档中加载天气预报,例如:http://weather.yahooapis.com/forecastrss?w=2442047&u=c

让我说我想读取第一个值,节点“title”。

现在根据教程,我使用了以下脚本:

<!DOCTYPE html>
<html>
<head>
<script src="loadxmldoc.js"></script>
</head>
<body>
<script>
    xmlDoc = loadXMLDoc("http://weather.yahooapis.com/forecastrss?w=2442047&u=c");
    x = xmlDoc.getElementsByTagName("title");
    document.write(x.nodeValue);
</script>
</body>
</html>

但我没有得到任何结果。在我犯错的地方有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

这很可能与同一原产地政策有关。这意味着您不允许从运行JavaScript的域以外的其他域获取数据。

为了进一步说明,如果我在www.example.com/有一个页面,我可以使用该函数从www.example.com/example1/data.xml获取xml文件,但我不允许从www.someothersite.com获取数据。有办法解决此问题:Ways to circumvent the same-origin policy

您可以在此处详细了解:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

答案 1 :(得分:0)

您需要将XML文件放在您自己的域中。不允许跨域请求。

答案 2 :(得分:0)

//
//  you can do that using 'curl-lib', say in php, ( if your server support it, usualy they do ) like this:
//  
//    create this php file:
//  
//  doc_reader.php
//  ***********************************************************
//  <?php
//  
//  header('Content-Type: '. $_POST['url_mime']);
//  
//  $url  = $_POST['fetch_url'];
//  
//  $ch   = curl_init( $url );
//  
//  curl_setopt( $ch, CURLOPT_HEADER, false );
//  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
//  
//  echo curl_exec( $ch );
//
//  
//  exit;
//  
//  
//  ************************************************************
//  
//      and put it in the same directory where your page is.
//  
//      send http post request to the php file ( use jQuery ) :
//  
//  
$.ajax({
            url       :'doc_reader.php', 
            type      :'post', 
            dataType  :'xml', 
            data      :{ 
                        fetch_url  :'http://weather.yahooapis.com/forecastrss?w=2442047&u=c', 
                        url_mime   :'application/xml'
                      }, 
            success:function ( doc ) { 
               console.log( doc );
            }
      });

//
//   hope it helps...
//