【Ajax】向Controller传递form表单(未提交)的值

需求

1、不提交form表单的情况,将form表单的一个input的值传到后台的Controller(此处用jQuery)

2、后台的Controller接收到该值,Ajax的方式局部刷新页面某处(此处用thymeleaf实现)

实现第一个场景

不提交下面的form表单,将表单的一个input输入框的值(或是下拉选择框(select)的值,同理)传输到后台的controller

form表单部分

<form method="post" th:action="@{/gdsubmit}">        

  <select type="text" placeholder="请选择" name="studentFk" id="selectPerson" onblur="myFunction()">
      <option>请选择1</option>
      <option>请选择2</option>
      <option>请选择3</option>
  </select>
  <input type="text" name="id">

</form>

可以看到,该下拉选择框的id 和 onblur 均绑定了js:id="selectPerson" onblur="myFunction()"

JS部分


<script>
    function myFunction() {
        postData();
    }

    function postData() {
        //使用ajax的方式 向Controller提交表单

        //获取下拉框的值
        var opt_values = $("#selectPerson  option:selected").val();

        // #comment-container是选择器,选择了带#comment-container标签的html代码块,然后局部刷新该代码块。
        $("#comment-container").load("/refreshtopic/"+opt_values,function (responseTxt, statusTxt, xhr) {  //回调函数为空,没写逻辑
        });
    }
</script>

onblur是一个离焦事件,当离开焦点,就会执行myFunction()这个函数,myFunction()又会调用postData()这个函数,Ajax的方式向controller传值。

注意看load里面的路径:我写的是:
"/refreshtopic/"+opt_values
其实是路径的一个拼接,写死的路径拼上了一个变量。从而使Controller接收路径变量。

Controller接收下拉框的参数

@RequestMapping("/refreshtopic/{opt_values}")
    public String refreshTopic(@PathVariable("opt_values") Integer opt_values,Model model,HttpSession session) {

		//这样就接收到下拉框的参数了
        System.out.println(opt_values);
        //添加该属性到model
        model.addAttribute("hello","opt_values");
		//将该参数传递给需要局部刷新的html位置
        return "openreport::comment-container";
    }

实现第二个场景

可以看到,上面的controller返回了一个页面,页面就是 openreport.html 的对应 comment-container 的位置。(这里不懂看我之前写的文章:thymeleaf的局部刷新

<div th:fragment="comment-container" id="comment-container" class="comment-container">
      <h4 th:text="${hello}"></h4>
</div>

实际上就是局部刷新了这个位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现ajax提交form实现根据时间搜索订,可以按照以下步骤进行: 1. 在前端页面中编写一个,包含开始时间和结束时间的输入框,以及一个提交按钮。 2. 使用JavaScript获取中的数据,将其封装成一个对象。 3. 使用ajax发送POST请求,将数据作为请求参数发送到后端。 4. 在后端接收到请求后,根据数据查询数据库,将查询结果返回给前端。 5. 前端接收到响应后,使用JavaScript将查询结果渲染到页面上。 下面是一个简的示例代码: 前端页面: ``` <form id="search-form"> 开始时间:<input type="text" name="start_time" id="start-time"> 结束时间:<input type="text" name="end_time" id="end-time"> <button type="submit">搜索</button> </form> <div id="search-result"></div> <script> var searchForm = document.getElementById('search-form'); var searchResult = document.getElementById('search-result'); searchForm.addEventListener('submit', function(event) { event.preventDefault(); // 阻止默认提交行为 var startTime = document.getElementById('start-time').value; var endTime = document.getElementById('end-time').value; var formData = { start_time: startTime, end_time: endTime }; // 发送ajax请求 var xhr = new XMLHttpRequest(); xhr.open('POST', '/search'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { // 查询成功,渲染查询结果 searchResult.innerHTML = xhr.responseText; } else { // 查询失败,提示错误信息 searchResult.innerHTML = '查询失败:' + xhr.statusText; } } }; xhr.send(JSON.stringify(formData)); }); </script> ``` 后端Java代码: ``` @Controller public class OrderController { @Autowired private OrderService orderService; @PostMapping("/search") @ResponseBody public String searchOrders(@RequestBody Map<String, String> form) { String startTime = form.get("start_time"); String endTime = form.get("end_time"); List<Order> orders = orderService.searchOrders(startTime, endTime); // 将查询结果渲染成HTML代码 StringBuilder sb = new StringBuilder(); sb.append("<table>"); sb.append("<tr><th>订号</th><th>下时间</th><th>金额</th></tr>"); for (Order order : orders) { sb.append("<tr>"); sb.append("<td>").append(order.getOrderNo()).append("</td>"); sb.append("<td>").append(order.getCreateTime()).append("</td>"); sb.append("<td>").append(order.getAmount()).append("</td>"); sb.append("</tr>"); } sb.append("</table>"); return sb.toString(); } } ``` 注意事项: 1. 在发送ajax请求时,需要设置请求头Content-Type为application/json,以便后端能够正确解析请求参数。 2. 在后端接收请求参数时,需要使用@RequestBody注解将请求参数映射为Map<String, String>类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值