当我尝试在非安全网站(即http,而不是https)上使用$.get
时,我收到此错误:
jquery.min.js:4混合内容:“...”页面是通过HTTPS加载的,但请求了一个不安全的脚本“http://api.openweathermap.org/data/2.5/weather?lat=50&lon=2?callback=jQuery ...”。此请求已被阻止;内容必须通过HTTPS提供。
我一直在努力想办法解决这个问题。问题是固定的,因为服务器由OpenWeather.org托管,而且它是一个非安全的站点(即http,而不是https)。
这是我的请求代码:
$.get("https://api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&APPID=123456", function(data) {
tempC = data.weather.main.temp / 10; // OpenWeather API returns Celsius * 10
rain = data.rain["3h"];
clouds = data.clouds.all;
});
当然,简单地将请求网址更改为https://api.openweathermap.org ...不起作用。尝试过并且没有用。
我现在能想到的唯一解决方案是找到可以免费用于我的项目的另一个天气API,但我想知道是否还有一种方法可以使用OpenWeathermap的API,因为它是http。很想知道这个因为因为它是http而不是https而不得不解散某些API似乎很浪费。
答案 0 :(得分:1)
在SO上发现了关于同一"混合内容的另一篇文章"问题。它很有用,并指出了许多其他资源来解决这个问题。
提问者最终删除了openweathermap API(因为它是通过HTTP提供的)并使用了forecast.io的API(在仍然免费的情况下通过HTTPS提供)。
Using Open Weather Map which is HTTP only through an HTTPS website and NOT get mixed content warning
答案 1 :(得分:0)
所以,问题是,您在HTTPS站点(JSFiddle和Coodepen)上运行代码。出于安全原因,您的浏览器不允许在HTTPS站点上使用HTTP-Connections。您可以通过在运行代码的页面上强制HTTP(尝试从本地文件或本地主机运行代码)来解决该问题,或者您可以创建HTTPS - >服务器上的HTTP转发,它将从您的代码接收HTTPS请求并向API发送HTTP请求。
我建议首先尝试从本地主机或本地文件运行(不确定每个浏览器是否允许来自本地文件的AJAX,但您可以在设置localhost之前尝试),这应该适合您。如果您只想测试API,可以简单地将GET请求的URL复制到浏览器选项卡中并执行它。