首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用XMLHttpRequest从rest api获取响应

无法使用XMLHttpRequest从rest api获取响应
EN

Stack Overflow用户
提问于 2018-06-09 02:09:40
回答 3查看 667关注 0票数 1

我想使用XMLHttpRequest调用get rest api,但是我得到了错误-

“未捕获SyntaxError: JSON输入意外结束”。

rest api json响应数据

代码语言:javascript
复制
{
    "timestamp": "2018-06-08T16:52:50.509Z",
    "dataFrame": "AQAAKCoAAQgFKgABBg==",
    "fcnt": 825,
    "freq": 865572000,
    "port": 2,
    "rssi": -115,
    "snr": -16,
    "sf_used": 12,
    "id": 1528476770509,
    "dr_used": "SF12BW125",
    "decrypted": true
}

代码

代码语言:javascript
复制
 <script>
        function UserAction() {
    var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "url", true);
        xhttp.setRequestHeader("Content-type", "application/json");
        xhttp.setRequestHeader("Authorization", "Basic a2Vyb==");
        xhttp.send();
    var response = JSON.parse(xhttp.responseText);
}
    </script>

编辑:

代码

代码语言:javascript
复制
 <script>
     function userAction() {
        let xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
            if (this.readyState == 4 && this.status == 200) {
                let response = JSON.parse(xhttp.responseText);
                var dataFrame = response.dataFrame;
                /** code that handles the response **/
            }
        };
        xhttp.open("GET", "url", true);
        xhttp.setRequestHeader("Content-type", "application/json");
        xhttp.setRequestHeader("Authorization", "Basic a2VybmVsc==");
        xhttp.send();
    </script>

HTML

代码语言:javascript
复制
 <button type="submit" onclick="userAction()">Search</button>
   <h1 id="data"></h1>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-09 02:13:20

您应该侦听请求的XMLHTTPRequest.onreadystatechange事件,以便只在请求完成后才解析结果:

代码语言:javascript
复制
functio userAction() {
  let xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      let response = JSON.parse(xhttp.responseText);
      document.getElementById("data").innerHTML = response.dataFrame;
    }
  };
  xhttp.open("GET", "filename", true);
  xhttp.setRequestHeader("Content-type", "application/json");
  xhttp.setRequestHeader("Authorization", "Basic a2Vyb==");
  xhttp.send();
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-09 02:16:51

您需要将xhttp.onreadystate属性设置为回调函数来处理各种状态,然后在收到响应时对其进行处理。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange

票数 0
EN

Stack Overflow用户

发布于 2018-06-09 02:21:57

在输出请求之前,您应该检查请求的状态。

代码语言:javascript
复制
function UserAction() {
   var xhttp = new XMLHttpRequest();
    xhttp.open("GET", "url", true);
    xhttp.setRequestHeader("Content-type", "application/json");
    xhttp.setRequestHeader("Authorization", "Basic a2Vyb==");
    
    xhttp.onload = function(){
        if(xhttp.status ==200){
            var response = JSON.parse(xhttp.responseText);
        }
    }
    
    xhttp.send();
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档