jQuery AJAX提交表单未触发Spring Controller方法问题排查
问题排查与修复方案
核心问题出在前端jQuery事件绑定的位置错误,另外还有几个潜在问题会导致请求异常,按以下步骤修复即可:
1. 修复事件绑定失效问题
你把#ip_submit按钮的点击事件绑定代码写在了$(document).ready()回调函数的外面。
浏览器解析页面是从上到下执行的,执行到事件绑定代码时,id为ip_submit的按钮DOM元素还没渲染完成,jQuery找不到对应元素,事件根本没绑定成功,点击按钮自然不会触发AJAX请求,后端接口也不会被调用。
把点击事件的代码移到$(document).ready()内部即可,调整后的JS代码如下:
$(document).ready(function() { $('#verify_success').hide(); $('#verify_fail').hide(); $('#command_header').hide(); $('#command_text').hide(); $('#command_area').hide(); // 事件绑定必须放在DOM加载完成的回调里 $('#ip_submit').click(function () { $.ajax({ type: "POST", url: "/verifyRouterIP", // 不要手动拼接参数字符串,用对象格式传参可以自动处理特殊字符转义 data: {routerIP: $('#ip_text').val()}, success: function(msg) { alert("请求成功,返回内容:" + msg); }, // 增加错误回调,方便定位请求异常 error: function(xhr, status, err) { console.log("请求失败,状态码:" + xhr.status); } }); }); });
2. 排查接口路径404问题
如果改完事件绑定还是调不通接口,打开浏览器F12开发者工具,切换到「网络」面板,点击按钮看发出去的请求状态:
- 如果状态码是404,说明你写的接口路径不对。很多Spring项目会配置上下文路径(context-path),直接写
/verifyRouterIP会请求到服务根路径,匹配不到你项目里的接口,可以改成相对路径verifyRouterIP,或者补上正确的上下文前缀。
3. 后续开发注意点
你当前的verifyRouterIP方法返回值是视图名welcome,AJAX请求拿到的会是整个JSP页面的HTML源码。如果后续需要给前端返回JSON格式的校验结果,需要给方法加上@ResponseBody注解,否则会报视图解析错误。
另外你页面上id为command_text的输入框name属性也写成了routerIP,后续提交表单时会出现参数重名问题,记得改成对应的命令参数名。
内容的提问来源于stack exchange,提问作者hell_storm2004
相关产品推荐
相关产品推荐

