我想要做的是从 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] 删除。
我来说两句