javascript - 如何从公共(public) API 获取 JSON 响应到 JSON 对象?

标签 javascript api xmlhttprequest

<分区>

我正在尝试从 OpenWeatherMap API 获取一些数据。当我发送带有所需 API key 和位置数据的请求时,一切都正常返回。返回的数据似乎是 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

最佳答案

您的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:

let jsonData;
let jsonActual;
function GetWeather(city, country){
    fetch(`${weatherUrl}${city},${country}${weatherKey}`).then(res => res.json()).then(res => {
        jsonData = res;
        jsonActual = JSON.parse(res);
    });
}

关于javascript - 如何从公共(public) API 获取 JSON 响应到 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388067/

相关文章:

javascript - try-catch 不适用于 XMLHTTPRequest

javascript - 两个for循环一升一降创建两种不同的数据结构

Javascript 表单操作在使用 onsubmission 事件确认之前执行

java fb2 库

php - 使用 Javascript 错误事件监听器检测失败与 PHP 在响应文本中返回 1

javascript - GGeoXML如何访问跨域XML文件?

javascript - 如何在 angularjs 中的单选按钮中应用自动保存概念?

javascript - 字符串搜索算法实现

javascript - 您可以在新的 AngularJS i18n 系统(1.4 中推出)中翻译动态消息吗?

jquery - 托管 API 时有什么需要注意的吗?