首页 > 解决方案 > 使用 jQuery 从外部 XML url 抓取信息

问题描述

我需要从外部 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 上

标签: javascriptjqueryjsonxmlxml-parsing

解决方案


简短的回答是,您无法通过在浏览器中运行的 Javascript 执行您想要执行的操作。

同源策略将阻止对不同域上的 URL的AJAX 请求。此政策有几个例外:

  1. 如果目标服务器支持CORS,则可以表明跨域请求是可以的。您尝试访问的 URL 位于不支持 CORS 的服务器上。

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

是的,jQuery 确实允许您向另一个域发出 JSONP 请求,但响应不是 Javascript 而是 XML。您的浏览器正在尝试像执行 Javascript 一样执行 XML,但由于语法错误而失败。

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


推荐阅读