在 get 请求中嵌套 http post 请求

拉米斯·阿布齐纳

我想要做的是从 API 端点获取数据并将它们显示在表单的输入字段中,然后从输入字段捕获密码并将整个 json 发布到我的端点我尝试嵌套 HTTP 请求,get 工作正常但它的帖子部分无法正常工作

这是我的代码

const http = new XMLHttpRequest();
http.open("GET", "http://localhost:3000/api/mqtt", true);
http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
        console.log(http.responseText);
        var respond = JSON.parse(http.responseText);
        console.log("respond is" + respond);
        document.getElementById('broker-address').value = respond.ip;
        document.getElementById('broker-port').value = respond.port;
        document.getElementById('client-id').value = respond.client_id;
        document.getElementById('username').value = respond.username;
        document.getElementById('topic-prefix').value = respond.prefix;
        var param = document.getElementById('password').value;

        http.open("POST", "http://localhost:3000/api/mqtt");
        http.setRequestHeader("Content-Type", "application/json");

        var data = {    
            ip: respond.client_id,
            port: respond.port,
            client_id: respond.client_id,
            username: respond.username,
            password: param, // POST only
            prefix: respond.prefix
        };

        var json = JSON.stringify(data);
        http.send(json);
   }
}
http.send(); 

我得到的错误是

VM4287:1 Uncaught SyntaxError: Unexpected token O in JSON at position 0
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.http.onreadystatechange 

我的 GET 响应如下所示

  {"ip":"arduinoClient",
"port":"1883",
"client_id":"arduinoClient",
"username":"user1",
"password":null,
"prefix":"gos-lan-test/fx4t/pwr/node/mr/mod-1/"}

我在这里做错了什么,有什么更好的想法吗?谢谢

拉米斯·阿布齐纳

我发现这个问题是因为 Get 请求运行了两次,一次是为了获得第一个 get 响应,这是我在问题中发布的 JSON 的可解析文本,第二次是在返回“OK”响应的发布请求之后",这是一个无法解析为 json 对象的字符串,它会引发此错误,该问题可以通过一个简单的 if 条件来解决,以防止解析如果响应为“OK”或分离 GET 和 POST 请求

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章