qq_40619811 2022-07-30 20:14 采纳率: 89.8%
浏览 24
已结题

超链接如何过滤掉get请求,只留下post请求,解决空指针问题

你好,我准备点击页面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请求的错误)。怎么做呢?

  • 写回答

1条回答 默认 最新

  • 快乐的小小鸟 2022-07-30 23:27
    关注

    浏览器只能用 get请求啊,又不是表单

    你可以在点击 1.html -> 2.html中
    请求改成get,而参数不要用data :xx 传
    直接在
    url:'./li1.html ?' data= "+stdlib" ,

    get请求是拼接在url后面的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题
  • ¥15 yolov5中的val测试集训练时数量变小问题
  • ¥15 MPLS/VPN实验中MPLS的配置问题
  • ¥15 materialstudio氢键计算问题
  • ¥15 echarts图表制作