IE9中的Jquery $ .get

时间:2013-06-19 16:15:02

标签: ajax jquery internet-explorer-9

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

1 个答案:

答案 0 :(得分:1)

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

如果浏览器/框架不支持通过GETPOST的跨域请求,则需要回退到JSONP个请求。

Wiki docs of Openstreetmap Nominatim

  

json_callback = LT;串GT;在回调函数(JSONP)中包装json输出

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

现在你看一下你的框架的文档:

jQuery.getJSONJSONP部分

  

如果网址包含字符串“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=?