javascript - 使用 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 上
解决方案
简短的回答是,您无法通过在浏览器中运行的 Javascript 执行您想要执行的操作。
同源策略将阻止对不同域上的 URL的AJAX 请求。此政策有几个例外:
如果目标服务器支持CORS,则可以表明跨域请求是可以的。您尝试访问的 URL 位于不支持 CORS 的服务器上。
如果目标服务器支持 JSONP,您的脚本可以通过使用
<script>
页面中的标记从目标服务器检索数据,该标记具有src
指向目标 URL 的属性并包含一个回调参数,以告诉服务器将数据包装在一个返回的 javascript 函数中数据。您尝试访问的 URL 位于不支持 JSONP 的服务器上。
是的,jQuery 确实允许您向另一个域发出 JSONP 请求,但响应不是 Javascript 而是 XML。您的浏览器正在尝试像执行 Javascript 一样执行 XML,但由于语法错误而失败。
对此的任何解决方案都需要在托管您的代码的服务器上提供服务器端支持。您可以在 Web 服务器上设置代理 URL,但您需要非常小心地执行此操作,因为您不希望您的服务器被用作开放代理。您还可以使用 cron 作业使用 curl 获取 URL 并将其保存到服务器上的静态文件中,但这可能有点粗鲁。
推荐阅读
- asp.net - 使用 Webpack 将 SASS 缩小并捆绑到缩小的 css 文件中?
- c++ - 使用映射到 1D 的 2D 数组的访问冲突读取位置
- apache-kafka - Flink 文件 Sink 中的容错
- neural-network - 感知器的动画边界可视化
- python - Jupyter notebook 不反映虚拟环境中的库版本变化
- c++ - 在 C++ 中指定导入指令的路径
- java - 我可以使用 XMLUnit 比较两个结构略有不同的 XML 文件吗?
- ios - React Native 与原生 iOS SDK - 显示原生视图并导航到其他原生视图
- c - 使用 rmmod 程序冻结后
- javascript - JQuery - 滚动到页面顶部,然后重新加载