知道为什么这在IE9中不起作用,但在Chrome和Firefox中不起作用?
$.get("http://nominatim.openstreetmap.org/search", { format: "json", q: val, polygon: 0, addressdetails: 1 })
.done(function(results) {
if (!results) return;
// do something
});
我知道IE8不支持它,但我认为9会吗?
更新
新代码
$.ajax({
type: 'GET',
url: "http://nominatim.openstreetmap.org/reverse",
data: { format: "json", lat: lat, lon: lng, zoom: 18, addressdetails: 1 },
error: function(xhr, status, error) {
myTable.fnUpdate("Not supported by browser", aPos[0], 4);
},
success: function(data){
myTable.fnUpdate(data.display_name, aPos[0], 4);
}
});
至少有了这个,我可以显示“浏览器不支持”,而不是没有发生任何事情,是否有任何技巧可以让它在IE9中运行?
更新2: 这似乎适用于FF,Chrome和IE9。 http://jsfiddle.net/BXhkm/4/ 但是当我向我的应用程序添加相同的代码时,第一个请求是成功的,然后我得到错误:没有调用数据。
答案 0 :(得分:1)
要解决跨域问题,您需要阅读Server API和jQuery的文档。
如果浏览器/框架不支持通过GET
或POST
的跨域请求,则需要回退到JSONP
个请求。
Wiki docs of Openstreetmap Nominatim:
json_callback = LT;串GT;在回调函数(JSONP)中包装json输出
这告诉您定义回调函数的参数是json_callback
现在你看一下你的框架的文档:
jQuery.getJSON
第JSONP
部分
如果网址包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。有关更多详细信息,请参阅$ .ajax()中有关jsonp数据类型的讨论。
这会告诉您是否在请求网址中包含了一个参数,其值为?
。此?
已替换为JSONP
请求的回调方法。
在这两个信息中,您可以创建此查询:
$.getJSON("http://nominatim.openstreetmap.org/reverse?json_callback=?",
{ format: "json", lat: lat, lon: lng, zoom: 18, addressdetails: 1 },
function(data) {
console.log("success");
});
您可以确定使用getJSON
代替ajax
,但重要的是您要执行jsonp
请求。
修改强>
第一个?
标记参数列表的开头,第二个?
是jsonp
回调的占位符。
http://nominatim.openstreetmap.org/reverse?json_callback=?