【发布时间】:2021-11-08 08:44:49
【问题描述】:
我正在尝试通过XMLHttpRequest 发送PUT 请求,但它返回一个空的,前端使用JS,后端使用nodejs。而在开发工具的网络部分,它显示 PUT 是 ok 。我已经处理这个问题超过 10 天了,我们将不胜感激每一点支持。我真的需要这个,因为我不知道下一步该做什么。快把我逼疯了。
下面是我的html
<body>
<form action="location.js" id="myLocation" method="PUT">
<br>
<div>
<label> location </label>
<input id="location" type="text" name="location" required>
</div>
<br>
<div>
<button type=submit>submit</button>
</div>
</form>
<div id="locate">
</div>
<a href="login.html"> GO TO LOGIN </a>
<script src="location.js"> </script>
<script src=""> </script>
</body>
接下来是XMLHttpRequest的JS
var form = document.getElementById('myLocation');
var display = document.getElementById('locate');
form.addEventListener('submit', sendData);
function sendData(e) {
e.preventDefault();
var location = document.getElementById('location').value;
var params = JSON.stringify({
"location": location
});
var val = params;
const XHR = new XMLHttpRequest();
XHR.onload = function () {
var out1 = this.responseText;
display.innerHTML = out1;
console.log(out1);
};
XHR.open('PUT', 'http://localhost:5000/parcel/:id/location', true);
XHR.setRequestHeader('Content-type', 'application/json; charset=utf-8');
XHR.setRequestHeader('Method', 'PUT');
XHR.send(val);
}
下面是 PUT 请求的 API 路由器:
router.put('/:id/location', async (req, res) => {
res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
res.setHeader("Access-Control-Allow-Headers", "Content-Type, application/json;charset=utf-8");
res.setHeader("Access-Control-Allow-Method", "PUT");
let parcels
try {
const {_id} = req.params.id;
const {location} = req.body.location;
parcels = await parcel.findByIdAndUpdate(_id, location);
res.send(parcels);
} catch (err) {
console.log(err);
if (parcels == null) {
res.send('error nul')
} else{
res.send('unsuccesful')
}
}
});
【问题讨论】:
-
PUT请求不应返回任何内容。为了验证PUT请求是否成功,您需要检查 HTTP 状态 - source -
哇,非常感谢您提供这些信息。我检查了 HTTP 状态,它在 PUT 上显示 200 表示 OK,但旧值不会更改为新值。
标签: javascript node.js express