0

知道为什么这在 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/ 但是当我向我的应用程序添加相同的代码时,第一个请求成功,然后我得到错误:未调用数据。

4

1 回答 1

1

要解决跨域问题,您需要阅读 Server API 和 jQuery 的文档。

如果浏览器/框架不支持跨域请求,GET或者POST您需要回退到JSONP请求。

Openstreetmap Nominatim 的 Wiki 文档

json_callback=<string> 将 json 输出包装在回调函数 (JSONP) 中

这告诉你定义回调函数的参数是json_callback

现在您查看框架的文档:

jQuery.getJSON 部分JSONP

如果 URL 包含字符串“callback=?” (或类似的,由服务器端 API 定义),请求被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

这会告诉您是否在请求 url 中包含一个参数并且该参数具有 value ?。这?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请求。

EDIT 第一个?标记参数列表的开始,第二个?jsonp回调的占位符。 http://nominatim.openstreetmap.org/reverse?json_callback=?

于 2013-06-20T08:49:59.287 回答