AJAX请求传参至控制器失败:无法获取输入框值到JavaScript变量
解决AJAX无法获取输入框值的问题
嘿,别担心,作为编程新手遇到这种情况太正常啦!咱们一步步来搞定你的问题:
问题根源
你现在用$(this).val()来获取fund_id和day的值,但$(this)在这里指代的是整个#historic_form表单,表单元素本身没法直接用val()拿到内部输入控件的值,这就是alert出来的day为空的原因。另外还要注意:你的HTML里没把这些输入控件包裹在<form id="historic_form">...</form>标签里,这会导致submit事件绑定根本不起作用,得先补上这个表单容器哦!
修正后的代码
第一步:补全HTML表单结构
把所有输入控件放进表单标签内:
<form id="historic_form"> <select required id="member_id" name="member_id" class="form-control"> <option selected disabled>Select Member</option> <?php for ($i=0;$i<$fMembers->num_rows();$i++){ echo "<option value='".$fMembers->row($i)->id."'>".$fMembers->row($i)->member_name."</option>"; }?> </select> <select required class="form-control" id="fund_id" name="fund_id"> <option selected disabled>Select Fund</option> </select> <input type="date" required name="day" placeholder="Select a date" class="form-control datepicker hasDatepicker" data-dateformat="dd/mm/yy" id="histDate"> <!-- 记得加提交按钮,不然没法触发submit事件 --> <button type="submit">Submit</button> </form>
第二步:修正JavaScript代码
针对性地获取每个输入控件的值:
$('#historic_form').submit(function(e) { e.preventDefault(); // 通过控件id精准获取对应的值 var fund_id = $('#fund_id').val(); var day = $('#histDate').val(); $.ajax({ url:'Search/Searchday', type: 'POST', dataType:'json', data: {fund_id: fund_id, day: day}, error: function() { alert("请求出错啦,当前日期值:" + day); }, success: function(response) { // 注意:这里的title和description要从后端返回的response里取,比如response.title、response.description // 假设你的后端JSON返回里包含这两个字段 $("tbody").append("<tr><td>"+response.title+"</td><td>"+response.description+"</td></tr>"); } }); });
额外小提示
- 如果你想简化表单数据获取,可以用
$('#historic_form').serialize(),它会自动把表单里所有带name属性的控件值拼成键值对,不用一个个手动获取:
注意你的日期输入框data: $('#historic_form').serialize(),name是day,后端要对应接收这个参数名哦。 - 调试时可以在submit事件开头加
console.log(fund_id, day),快速确认值有没有正确拿到。
内容的提问来源于stack exchange,提问作者David Hangula




