我需要从外部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上
答案 0 :(得分:0)
简短的回答是,你无法通过在浏览器中运行的Javascript来做你想做的事。
same origin policy将阻止不同域上的URL的AJAX请求。这项政策有几个例外:
如果目标服务器支持CORS,则可以指示跨源请求正常。您尝试访问的URL位于不支持CORS的服务器上。
如果目标服务器支持JSONP,则您的脚本可以使用页面中的<script>
标记从目标服务器检索数据,其中src
属性指向目标网址并包含callback参数告诉服务器将数据包装在返回数据的javascript函数中。您尝试访问的URL位于不支持JSONP的服务器上。
是的,jQuery确实允许您向其他域发出JSONP请求,但响应不是Javascript而是XML。您的浏览器正在尝试执行XML,就像它是Javascript一样,并因语法错误而失败。
任何解决方案都需要在托管您的代码的服务器上提供服务器端支持。您可以在Web服务器上设置代理URL,但是您需要非常小心,因为您不希望将服务器用作开放代理。您还可以使用cron作业使用curl获取URL并将其保存到服务器上的静态文件中,但这可能有点粗鲁。