你好,我准备点击页面A(页面A叫querycp2.html)的某一个模块,传递一个数据名叫xuhao,并在页面B(页面B叫li1.html)通过mybatis查询数据库以显示相应的信息。
可是,我在浏览器点击该模块,该模块会发出两次请求,第一次是get请求,get请求中xuhao为空,导致页面B出现空指针错误。第二次是post请求,数据是正常的。
据说浏览器发送的请求都是get请求。
那么,关键就是我的这个超链接怎么样才能让它不发get请求,而是发出post请求,并且能跳转到B页面。
代码发来
<a href="./li1.html" style="text-decoration: none" id="coo" >
<div id="co" style="overflow:hidden;background-color: black">
<div id="cp" th:each="cangpin,cangpinStat:${cangpinlist}">
<div id="stdlib" hidden="hidden" th:text="${cangpin.xuhao}" ></div>
<div id="cq" width="80%" height="auto">
<img th:src="${cangpin.path2}">
<p class="cqb" style="display:none" th:text="${cangpin.began}"></p>
<p class="cqd" style="display:none" th:text="${cangpin.num}"></p>
<p class="cqc"></p>
</div>
这是页面A的HTML代码,有一个a超链接标签,它永远是get请求,怎么才能使超链接不发get请求而是post请求,并且又能跳转到B页面(也就是li1.html)页面。
这是ajax。ajax是正常的。
$("#coo").click(function (event) {
// event.preventDefault();
$.ajax({
type:'post',
url:'./li1.html',
async:true,
dataType:'text',
error:"重新请求",
contentType:"application/json;charset=utf-8",
data: stdlib,
success:function (data){
},
Error:function (data) {}
});
})
注意,我注释掉了event.preventDefault();这行代码,如果这行代码不注释掉,虽然数据是正常了,而且只有一个post请求,没有get请求,但是页面就无法跳转了。这样也不行。
@CrossOrigin
@RequestMapping("/querycp2")
@ResponseBody
public Model getCangpin2(Model mp, @RequestBody(required = false) String xuhao){
ArrayList<Cangpin> cps= reds.getResult();
for(int i=0;i<cps.size();i++) {
cps.get(i).setYuanjia(new DecimalFormat("#0.00").format(BigDecimal.valueOf(Double.valueOf(cps.get(i).getYuanjia()))));
cps.get(i).setXianjia(new DecimalFormat("#0.00").format(BigDecimal.valueOf(Double.valueOf(cps.get(i).getXianjia()))));
}
mp.addAttribute("cangpinlist", cps);
return mp;
}
这是A页面的后端,路径是querycp2.html
@RequestMapping(value = "/li1.html")
@ResponseBody
@CrossOrigin
public Model getCangpinDetail(Model mp, @RequestBody(required = false)String xuhao){
mapper mapper2 = getCangpinArr.getCangpinMap();
Details det = mapper2.CangpinDetail(xuhao);
System.out.println("数据1#" + xuhao);
System.out.println("数据2#" + det.getCangpinname());
return mp;
}
这是B页面的后端,路径是li1.html
如果我把B页面的后端改成@PostMapping,浏览器就会显示错误,说当前页面不支持‘get’请求,没办法,我只能改回去。
如果在RequestMapping加上method = RequestMethod.POST也不行,还是不能过滤掉get请求。
我想问问如何点击A页面中的模块,在浏览器中,过滤掉get请求,而是用post请求传递数据。并且跳转到B页面呢?
我用的是springboot+thymeleaf+mybatis+redis,也有jqeury和ajax。
怎么样点击超链接,过滤掉get请求,使它不发出get请求,而是只有一个post请求,并且跳转到相应的B页面,并且解决空指针问题呢?而且不用@PostMapping注释(因为这个注释会报不支持get请求的错误)。怎么做呢?