我正在尝试从OpenWeatherMap API中获取一些数据。当我发送带有所需API密钥和位置数据的请求时,一切返回正常。返回的数据似乎是JSON格式。但是,当我在字符串上执行JSON.parse()函数时,会出现“输入意外结束”错误。
我发现有趣的一件事是,如果我将字符串存储到变量中,然后继续在Chrome的调试控制台中执行该函数,那么它会很好地完成。
let jsonData;
let jsonActual;
function GetWeather(city, country){
Http = new XMLHttpRequest();
Http.open("GET", weatherUrl + city + "," + country + weatherKey);
Http.send();
Http.onreadystatechange=(e)=>{
jsonData = Http.response;
jsonActual = JSON.parse(jsonData.toString());
}
}
在使用控制台时:
x = JSON.parse(jsonData) // Completes successfully
答案 0 :(得分:1)
在您的职能onreadystatechange
中,您拥有
Http.onreadystatechange=(e)=>{
jsonData = Http.response;
jsonActual = JSON.parse(jsonData.toString());
}
尝试改为执行此操作:
Http.onreadystatechange=(e)=>{
if (this.readyState === 4) {
jsonData = Http.response;
jsonActual = JSON.parse(jsonData.toString());
}
}
答案 1 :(得分:0)
您的root@7bfa781e1a2c:/opt/hive/conf# ps aux | grep mysql
mysql 1931 0.0 0.0 4624 1768 ? S 20:19 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 2282 0.2 8.7 1416908 179700 ? Sl 20:19 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
root 2594 0.0 0.0 11460 1084 pts/1 S+ 20:24 0:00 grep --color=auto mysql
root@7bfa781e1a2c:/opt/hive/conf#
是否readyState
从未被检查:
complete
您还可以检查Http.onreadystatechange = e => {
if (this.readyState == "complete") {
jsonData = Http.response;
jsonActual = JSON.parse(jsonData.toString());
}
}
:
4
您甚至可以使其更简单并使用Http.onreadystatechange = e => {
if (this.readyState == 4) {
jsonData = Http.response;
jsonActual = JSON.parse(jsonData.toString());
}
}
:
fetch