我想做的是从API端点获取数据并将其显示在表单的输入字段中,然后从输入字段捕获密码并将整个json发布到我的端点 我尝试嵌套HTTP请求,但get可以正常工作,但其中的post部分不能正常工作
这是我的代码
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/"}
我在这里做错什么了,还有更好的主意吗? 谢谢
答案 0 :(得分:0)
我发现问题是因为Get请求运行两次,一次是为了获取第一个get响应,这是我在问题中发布的JSON的可解析文本,第二次是在发布请求之后返回了响应“ OK”,它不能被解析为json对象的字符串,将引发此错误 可以通过一个简单的if条件来解决问题,该条件可以防止如果response为“ OK”或将GET和POST请求分开进行解析