我已经阅读了多篇关于类似问题的帖子,但我没有 CORS 问题(我不认为)并且我的网络选项卡没有显示从客户端发送的第二篇文章
我正在使用 Axios 并对我的前端客户端做出react,经过长时间的调试,我发现某些东西正在触发我的 RestController 方法,总是两次,总是大约两分钟(这是一个非常长的响应,有大量的数据)
网络选项卡不显示第二个POST
,但是当从 Postman 运行时,一切都按预期工作(没有随机的双重调用)
轴:
showCurrent = (dateA, dateB) => {
axios.post("api/allData", {
params: {
date_a: dateA,
date_b: dateB
}})
//successful fetch
.then(res => this.setState({
Data: res.data,
isLoading: false,
showPage: true,
home: false,
}))
.catch(function (error) {
//handle errors here
alert(error.message);
})
};
和请求映射:
@RequestMapping(value = "/allData", method = RequestMethod.POST)
public @ResponseBody String allData(@RequestBody String req) throws JsonProcessingException {
CDate cDate = parseJSON(req);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(DateRange.getDataForDateRange(date));
}
控制器类也有@RestController
注解
因此,如果我在大约 2 分钟内运行查询,那就没问题了。但比这更长,控制器将被调用两次,一切都会变得混乱。
如果需要,我可以添加更多代码......只是不知道如何调查这个。
编辑:
在客户端和服务器端 Java 中添加了 Console.log in 方法。
console.log("whaaat");
axios.post("api/allContracts", {
params: {
date_a: dateA,
date_b: dateB
}}).....
whaaat 只会运行一次,而 post 将运行两次并且端点将触发两次......
编辑2:
什么..... 我还添加console.log()
了从点击到获取的每一步。没有什么会触发两次,除了POST
......
即使与本机reactfetch
相同也会发生
showCurrent = (dateA, dateB) => {
console.log("whaaat");
let obj = {};
let params = {};
params.date_a = dateA;
params.date_b = dateB;
obj.params = params;
this.setState({isLoading: true});
fetch("api/allData", {
method: 'POST',
body: JSON.stringify(obj),
mode: 'cors',
}).then( res => {
return res.json()
}).then( data => {
this.setState({
Data: data,
isLoading: false,
showPage: true,
home: false,
})
}).catch(error => {
//handle errors here
alert(error.message);
});
编辑 3:仍然没有任何解决方案......我阅读了预检选项请求,但网络选项卡上没有这样的东西。我试图在不同的 RequestMapping 中处理 OPTION 请求,但那个 dosent 甚至被触发....
试图在服务器和客户端中设置大约 200 万秒的超时,但这似乎也没有做任何事情.. 邮递员没有这个问题,一切正常