【发布时间】:2018-12-31 11:41:42
【问题描述】:
我正在使用带有 NodeJS 的 express 框架。当客户端发出 POST 请求时,它会将一些工作推送到 python 脚本,然后返回一个 JSON 对象到客户端网页。
我的问题是每当我的 POST 请求完成时客户端都会刷新。我已经使用 Axios 和 Fetch http 客户端进行了测试。 在发出这样的 POST 请求时如何防止我的网页刷新?
服务器代码如下所示:
app.post("/data/", function(req, res) {
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python', ["my_script.py"]);
pythonProcess.stdout.on('data', (data) => {
let result = data.toString();
res.send(JSON.stringify(result));
});
});
然后我从我的 React 客户端发出请求(使用 Axios,但 Fetch 的行为方式相同):
axios({
method: 'post',
url: `http://localhost:3001/videos/?url=${url}`,
responseType: 'json',
});
并且客户端网页刷新...
我知道 React 不应该受到责备,因为没有任何东西会更新应用程序状态。即使我对来自服务器的响应什么都不做,当 POST 完成时,网页仍然会刷新。
另外,我的网页上没有表单元素或类似的东西,我的button 是button 类型而不是submit 类型。
我有一种预感,这与调用 python 进程本身的方式有关,因为如果我只返回一个普通的 JSON 对象而不调用 python 子进程,我的客户端网页会获取数据并且不会刷新。
【问题讨论】:
-
表单上按钮的默认操作是提交,因此您可能需要在按钮处理程序中阻止它。
-
我试过了。我真的认为这是一个服务器端的问题。但以防万一,我尝试添加
preventDefault等。没有运气 -
极不可能是服务器端问题 - 服务器无法控制这样的浏览器,尤其是在 AJAX 请求时 - 浏览器开发者工具控制台会发生什么?
标签: javascript node.js express fetch axios