Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的网页在NodeJS POST请求后刷新?_Javascript_Node.js_Express_Fetch_Axios - Fatal编程技术网

Javascript 为什么我的网页在NodeJS POST请求后刷新?

Javascript 为什么我的网页在NodeJS POST请求后刷新?,javascript,node.js,express,fetch,axios,Javascript,Node.js,Express,Fetch,Axios,我正在使用带有NodeJS的express框架。当客户端发出POST请求时,它将一些工作推送到python脚本,然后将JSON对象返回到客户端网页 我的问题是,每当我的POST请求完成时,客户端就会刷新。我已经用Axios和Fetch http客户端进行了测试在发出这样的发帖请求时,如何防止网页刷新? 服务器代码如下所示: app.post("/data/", function(req, res) { const spawn = require("child_process").sp

我正在使用带有NodeJS的express框架。当客户端发出POST请求时,它将一些工作推送到python脚本,然后将JSON对象返回到客户端网页

我的问题是,每当我的POST请求完成时,客户端就会刷新。我已经用Axios和Fetch http客户端进行了测试在发出这样的发帖请求时,如何防止网页刷新?

服务器代码如下所示:

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的行为与此相同):

客户端网页将刷新

我知道React不应该受到责备,因为没有任何东西在更新应用程序状态。即使我对服务器的响应不做任何处理,当帖子完成时,网页仍然会刷新

此外,我的网页上没有表单元素或类似的内容,我的
按钮
按钮
类型,而不是
提交
类型


我有一种预感,这与python进程本身的调用方式有关,因为如果我只返回一个简单的JSON对象而不调用python子进程,我的客户机网页将获取数据,并且不会刷新。

我认为,您需要更改响应头,即响应类型为JSON类型

var头={};
标题[“内容类型”]=“应用程序/json”;
文件标题(200,标题);
应用程序选项(“/*”,函数(请求,恢复){
var头={};
//设置标题以处理CORS
标题['Access-Control-Allow-Origin']='*';
//标题['Access-Control-Allow-Origin']='http://localhost:?';
headers['Access-Control-Allow-headers']='Content-Type、Content-Length、Authorization、Accept、X-request-With';
标题['Access-controll-Allow-Methods']=“PUT、POST、GET、DELETE、OPTIONS”;
标题[“访问控制最大年龄”]=“86400”;
标题[“内容类型”]=“应用程序/json”;
文件标题(200,标题);
res.end();

});我想出来了。我的python过程的一部分是将文件写入React的
public
文件夹,这显然会导致React进行热重新加载。

如果您正在根据从
收集的数据进行nodeJS发布,则在用户单击类型为提交的按钮后,然后问题是表单提交按钮的本机HTML行为是进行页面刷新

解决这个问题的方法是——在您的表单onsubmit中,可能是
onsubmit={handleSubmit}
在handleSubmit函数上,让它接受一个事件,调用它。然后在任何其他代码之前执行event.preventDefault()。像这样:

handleSubmit(e){
   e.preventDefault();
  // the rest of your code, post call ,etc
}

表单上按钮的默认操作是提交,因此您可能需要在按钮处理程序中防止提交。我试过了。我真的认为这是服务器端的问题。但为了以防万一,我尝试添加了
preventDefault
之类的内容。很幸运,这不太可能是服务器端的问题-服务器无法控制这样的浏览器,特别是在AJAX请求中-在浏览器开发工具控制台中发生了什么?很有趣。。。现在我得到“发送到客户端后无法设置头”。这就好像express正在设置头并在从python子流程到达回调之前发送它们。请尝试在前面添加头:res.send(JSON.stringify(result));他们以前是。同样的问题。我猜报头在应该发送之前的某个时间点被发送回客户机,然后在调用回调时,它会将数据发送回客户机。由于它们是延迟,因此客户端刷新。但我仍然不知道为什么我会收到标题消息…你能不能也添加一个“选项”请求。我已经编辑了我的答案。
因为他们的答案是延迟,客户端刷新。
-这是一个非常奇怪的声明这是我的问题,而不是其他答案中提到的type='button',挽救了我的一天
handleSubmit(e){
   e.preventDefault();
  // the rest of your code, post call ,etc
}