2016-06-14 61 views
0

当我尝试在非安全网站上使用$.get我得到这个错误(即HTTP,HTTPS不是):如何在HTTP(非安全)服务器上使用jQuery 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; });

只需改变请求的URL https://api.openweathermap.org ......不行的,当然。试过了,并没有工作。

我现在唯一能想到的解决方案就是找到另一个可以免费使用的项目天气API,但是我想知道是否仍有使用OpenWeathermap API的方法,因为它是http。很想知道这一点,因为它只是因为它是http而不是https而忽略某些API似乎很浪费。

+0

您能否显示您的请求代码? – JohnnyAW

+0

顺便说一句,你是说,你通过HTTP调用请求,但错误消息清楚地表明,该请求是通过HTTPS发送的 – JohnnyAW

+0

哦,是的,忘记包含我的请求代码。我使用代码编辑了原始帖子。 @JohnnyAW yep,但错误消息指的是我测试代码的JSFiddle。 HTTPS是指JSFiddle网站。 – nickang

回答

0

所以,问题是,您在HTTPS站点(JSFiddle和Coodepen)上运行您的代码。出于安全原因,您的浏览器不允许HTTPS站点上的HTTP连接。您可以通过在运行代码的页面上强制使用HTTP(尝试从本地文件或本地主机运行代码)来解决该问题,也可以在服务器上创建HTTPS - > HTTP转发,以接收HTTPS请求从你的代码中发送一个HTTP请求到API。

我建议先尝试从本地主机或本地文件运行(不确定每个浏览器是否允许来自本地文件的AJAX,但您可以在设置本地主机之前尝试),这应该适合您。如果您只想测试API,您可以简单地将GET请求的URL复制到浏览器选项卡中并执行它。

+0

感谢您的回答。所以你说这是我的代码运行在HTTPS安全服务器上的事实,而且我的浏览器能够识别并拒绝从非安全的HTTP服务器上获取数据?我懂了。这就说得通了。至于测试网址,我已经成功完成了。直接粘贴到我的浏览器中时,HTTP API URL起作用。如预期的那样,我得到一个JSON对象,并返回相关数据。 – nickang

+0

这是否意味着如果我的代码在HTTP服务器上运行,并且它从HTTP服务器运行'$ .get'(通过API调用),它应该能够没有问题地这样做? – nickang

+0

@nickang,是的,你可以通过HTTP设置本地主机,并运行你的代码没有问题 – JohnnyAW