我正在尝试编写一个从openstreetmap API(http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6)加载数据的javascript应用程序,它基本上只是一个宁静的xml api。我正在尝试使用 jquery 来访问 XMl。但是我收到安全错误。这是一个跨站点脚本阻止。
如何访问该 XML?AFAIK OSM 不提供 jsonp,所以这不起作用。到底有没有?>
我正在尝试编写一个从openstreetmap API(http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6)加载数据的javascript应用程序,它基本上只是一个宁静的xml api。我正在尝试使用 jquery 来访问 XMl。但是我收到安全错误。这是一个跨站点脚本阻止。
如何访问该 XML?AFAIK OSM 不提供 jsonp,所以这不起作用。到底有没有?>
绕过跨站点脚本的两种方法是设置一个服务器端代理来调用 url,你的脚本调用你的服务器端代理。另一种方法是使用对跨站点调用没有限制的脚本标签来调用数据。
Dan 链接的博客文章向您展示了如何解决此问题,但背景如下:
从网页进行跨域 Javascript 调用的唯一方法是通过 JSONP。如果没有为您提供 JSONP,那么您将不得不求助于使用代理脚本,因为浏览器会故意阻止站点脚本进行此类调用。
请注意,如果您正在编写一个 Firefox 扩展,那么您是在特权空间中执行的,因此能够不受限制地进行此类跨域调用。
OpenStreetMap 的 Nominatim API 现在支持 JSONP,因此您可以纯粹通过客户端代码获取数据,无需在您自己的服务器上进行任何额外操作。这是一个jsfiddle示例- 如果您可以在 jsfiddle 中进行操作,那么您可以在任何地方进行操作。
对于如何从其他域访问 API 的更一般的问题,这里有一些有用的东西,我在研究许多部分完整且经常相互矛盾的答案时,通过反复试验。如果有任何不准确或变得不准确,请编辑或评论。
json_callback
,jQuery 的默认设置callback
只有在碰巧 API 被编程为监听的情况下才会起作用?
(例如,如果它是json_callback
,那么someurl.com/api?json_callback=?
)。jQuery 弄清楚这是什么,将 替换?
为类似 的字符串jQuery1712164863864387412
,用相同的字符串命名内联函数,然后等待接收一些按名称触发该函数的代码并将 JSON 传递给它。
parseerror jQuery17109935275333671539_1300495251986 was not called
,这意味着 jQuery 具有已命名的函数,准备就绪并等待,但 API 没有使用该字符串来包装 JSON,因此不会调用该函数- 可能意味着您没有使用正确的参数名称someFunction({"some": "argument"});
,请参阅 jsfiddle 了解 jQuery 提供的内容)$.ajax
$.getJSON
<script>
)。希望这会对某人有所帮助!