0

我正在尝试使用一个简单的天气插件并使其变得智能,以便通过调用基于 IP 的地理定位服务来确定用户所属的位置。在 Chrome、FF 中工作。虽然不是 IE。有什么问题或为什么 IE 出现以下问题?我似乎在这里遇到了这个跨域调用问题。完整的小提琴:http: //jsfiddle.net/XfhQK/1/

 jQuery.getJSON('http://freegeoip.net/json/', function(data) {
     jQuery.simpleWeather({
        zipcode: data["zipcode"],
        woeid: '',
        location: '',
        unit: 'f',
        success: function(weather) {
          html = '<h2>'+weather.temp+'&deg;'+weather.units.temp+'</h2>';
          html += '<ul><li>'+weather.city+', '+weather.region+'</li>';
          html += '<li class="currently">'+weather.currently+'</li>';
          html += '<li>'+weather.tempAlt+'&deg;C</li></ul>';

          jQuery("#weather").html(html);
        },
        error: function(error) {
          jQuery("#weather").html('<p>'+error+'</p>');
        }
     });

});
4

2 回答 2

3

对于有类似问题的任何人,以这种格式传递 URL:

http://freegeoip.net/json/?callback=?  

而不仅仅是:

http://freegeoip.net/json 

为我工作。

更多解释在这里: http ://e-mats.org/2010/01/jquery-getjson-and-the-same-origin-policy/ 这里$.getJson not working in IE

感谢所有帮助我解决问题的人。

于 2013-06-24T21:50:06.090 回答
3

您正在访问的 URL 使用Access-Control-Allow-Origin(又名 CORS)。这在 IE 8 或 9 中不受支持。但是,IE 10 支持它。

无论如何,修复它的最简单方法是包含这个添加XDomainRequest对 jQuery 的支持的插件。

您还需要更改为使用$.ajax.

$.ajax({
    url: 'http://freegeoip.net/json/',
    dataType: 'json',
    type: 'GET',
    crossDomain: true
    success: function(data){
        // ...
    }

});

演示:http: //jsfiddle.net/XfhQK/4/

插件主页:https
://github.com/jaubourg/ajaxHooks 发现于:http ://bugs.jquery.com/ticket/8283

于 2013-06-24T21:52:54.377 回答