JavaScript KeyUp事件未触发HTML表单调用问题排查求助
排查思路
- 先验证事件绑定是否生效:在
keyup回调第一行添加console.log('事件触发'),打开浏览器F12控制台,在表单输入框输入内容看是否有日志输出。如果没有触发,检查form1是否是静态渲染的元素,如果是JS动态生成的表单,需要用事件委托写法替换现有绑定:$(document).on('keyup', '#form1', function () { ... }) - 检查请求参数是否正确:打开F12网络面板,触发请求后查看该
HashVB.aspx请求的详情:- 确认请求状态码为200,没有4xx、5xx类报错
- 查看请求载荷部分,比对所有参数的取值是否和页面输入一致,有没有空值、undefined的情况
- 确认请求头的
Content-Type确实为application/json
- 验证后端接口接参是否正常:在
HashVB.aspx的逻辑中添加日志,输出接收到的所有参数值,和C#端调用时传入的参数做对比,排查是否存在JSON格式解析失败、参数名不匹配导致取值为空的问题,ASP.NET WebForm处理JSON格式POST请求需要确保接口开启了对应配置,对应方法标记了[WebMethod]特性且允许POST访问 - 补充错误回调排查返回值问题:现有代码只写了success回调,添加error回调打印错误信息:
error: function (xhr, status, error) { console.log('请求出错', status, error, xhr.responseText) }
触发请求后看是否进入error分支,排查是否因为后端返回的内容不符合JSON格式、跨域等问题导致请求没有进入success逻辑
- 检查元素选择器是否正确:在浏览器控制台分别执行
$('#key').length、$('#hash').length等所有用到的选择器,确认返回值为1,如果返回0说明元素id拼写错误、或者元素不存在,如果返回大于1说明页面有重复id,都会导致取值/赋值异常 - 排查多请求覆盖问题:当前每次keyup都会触发请求,短时间多次输入会同时发送多个请求,可能出现后发的请求先返回,导致最终hash值被更早返回的旧结果覆盖,可以先输入一次内容后等待几秒看结果是否正确,验证是这个问题的话添加防抖逻辑限制请求频率即可
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

