OpenWeatherMap API HTTPS 拒绝 javascript
OpenWeatherMap API HTTPS 拒绝 javascript
我正在通过免费的编码营地尝试使用OpenWeatherMap API构建一个天气应用,但是它不起作用。我正在使用CodePen,因为需要在此上面提交,并且必须使用https来使用地理位置。这成为一个问题,因为我得到了这个错误信息。
混合内容:页面“https://s.codepen.io/boomerang/8658fc75197c1c3799d7eb446c1be54c1475174843341/index.html?editors=0010”通过HTTPS加载,但请求了不安全的XMLHttpRequest端点“http://api.openweathermap.org/data/2.5/weather?lat=54.757753799999996&lon=-1.6074879&APPID=APIIDHERE”。该请求已被阻止;内容必须通过HTTPS提供。
由于某种原因,我认为如果将API调用更改为HTTPS,它可能会起作用,但然后我得到了这个错误
GET https://api.openweathermap.org/data/2.5/weather?lat=54.757775699999996&lon=-1.6074815999999998&APPID=APIIDHERE net::ERR_CONNECTION_REFUSED
我已经使用了一个API密钥,但我在这里隐藏了它。
我尝试了一些在其他帖子中看到的修复方法,但迄今为止都没有起作用:/
我正在使用以下代码进行请求
function updateLoc (lat, long) { var url = "https://api.openweathermap.org/data/2.5/weather?" + "lat=" + lat + "&lon=" + long + "&APPID=" + APPID; sendRequest (url); } function sendRequest (url) { var xmlhttp = new XMLHttpRequest (); xmlhttp.onreadystatechange = function () { if (xmlhttp.readystate == 4 && xmlhttp.status == 200) { var data = JSON.parse (xmlhttp.responseText); var weather = {}; weather.icon = data.weather.icon; weather.dir = data.wind.deg; weather.wind = data.wind.speed; weather.temp = data.main.temp; weather.loc = data.name; weather.hum = data.main.humidity; update (weather); } }; xmlhttp.open ("GET", url, true); xmlhttp.send (); }
任何帮助将不胜感激 🙂
问题的原因是由于OpenWeatherMap API仅支持HTTP协议,而不支持HTTPS协议。这导致在使用HTTPS协议时,会出现HTTPS refusal错误。
解决方法是通过在API的URL前面添加https://cors-anywhere.herokuapp.com/
来绕过这个问题。这样,API的URL就变成了类似下面的形式:
https://cors-anywhere.herokuapp.com/http://api.openweathermap.org/data/2.5/forecast/daily?q=Bamenda&appid=****myid
通过这种方式进行API调用,就可以将其视为安全的HTTPS请求,从而解决了HTTPS refusal的问题。
OpenWeatherMap API HTTPS拒绝javascript的问题可能出现的原因是代码中的错误拼写。从上面的内容可以看出,问题出在代码中将"readystate"拼写为"readyState"。下面是解决该问题的方法。
在JavaScript中,XMLHttpRequest对象的属性名称是readyState,而不是readystate。因此,需要将代码中的错误拼写进行修正。以下是修改后的代码示例:
// 创建XMLHttpRequest对象 var xhttp = new XMLHttpRequest(); // 监听请求状态的变化 xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // 请求成功的处理逻辑 console.log("请求成功"); } else { // 请求失败的处理逻辑 console.log("请求失败"); } }; // 发送请求 xhttp.open("GET", "https://api.openweathermap.org/data/2.5/weather?q=London&appid=your_api_key", true); xhttp.send();
通过将错误拼写修正为正确的"readyState",代码应该能够成功发送HTTPS请求到OpenWeatherMap API,并根据返回的状态进行相应的处理。
以上是关于OpenWeatherMap API HTTPS拒绝javascript的问题的原因和解决方法。修正代码中的错误拼写,即可正常发送HTTPS请求并处理返回的数据。