使用jQuery从外部XML URL中获取信息

时间:2018-05-10 23:21:15

标签: javascript jquery json xml xml-parsing

我需要从外部XML文件(托管在其他域上的xml)中抓取/解析一些信息,并将该信息放在我的网站上。

我尝试了这个,但没有成功:

jQuery(document).ready(function()
{
  jQuery.ajax({
    type: 'GET',
    url: 'http://42netmedia.com/smart/signal_onAir10.xml',
    crossDomain: true,
    dataType: 'jsonp',
    success: parseXml
  });
});

function parseXml(xml)
{
  jQuery(xml).find('nowOnAirTitle').each(function()
  {
   jQuery(".my-site-element").append(jQuery(this).find('nowOnAirTitle').text());
  });
}

我希望我能够妥善解释。

PS。我正在使用jQuery,因为我的网站托管在WordPress上

1 个答案:

答案 0 :(得分:0)

简短的回答是,你无法通过在浏览器中运行的Javascript来做你想做的事。

same origin policy将阻止不同域上的URL的AJAX请求。这项政策有几个例外:

  1. 如果目标服务器支持CORS,则可以指示跨源请求正常。您尝试访问的URL位于不支持CORS的服务器上。

  2. 如果目标服务器支持JSONP,则您的脚本可以使用页面中的<script>标记从目标服务器检索数据,其中src属性指向目标网址并包含callback参数告诉服务器将数据包装在返回数据的javascript函数中。您尝试访问的URL位于不支持JSONP的服务器上。

  3. 是的,jQuery确实允许您向其他域发出JSONP请求,但响应不是Javascript而是XML。您的浏览器正在尝试执行XML,就像它是Javascript一样,并因语法错误而失败。

    任何解决方案都需要在托管您的代码的服务器上提供服务器端支持。您可以在Web服务器上设置代理URL,但是您需要非常小心,因为您不希望将服务器用作开放代理。您还可以使用cron作业使用curl获取URL并将其保存到服务器上的静态文件中,但这可能有点粗鲁。