javascript - 在获取请求中嵌套 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 的可解析文本,第二次是在 post 请求之后返回“OK”的响应",这是一个不能被解析为 json 对象的字符串,它会抛出这个错误,这个问题可以通过一个简单的 if 条件来解决,以防止解析如果响应为“OK”或分离 GET 和 POST 请求
推荐阅读
- python - 如何从列表列表中创建 Pandas DataFrame?
- php - 通过ajax发布数据时,PHP没有结果消息仍然显示
- postgresql - 编辑地理服务器发布的 OpenLayers2 中的功能并将更新的内容保存在 postgres 连接的数据库表中
- security - 使用 PHP 仅将 PDF 文件提供给经过身份验证的用户
- python - 分别取一个json文件的item
- c++ - 可以使用 filesystem::canonical 来防止传递给 fstream 的文件路径的文件路径注入吗
- .net - 为什么 SQL Server 的 SQL OLE DB 驱动程序会截断日期时间值的秒数和小数秒?
- javascript - 如何找到特定部分的引导程序
- oracle - 我们可以在 Unix 中通过“exp”命令导出视图吗
- android - 在 Xamarin Android 项目中放置系统参数的位置