You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AJAX请求传参至控制器失败:无法获取输入框值到JavaScript变量

解决AJAX无法获取输入框值的问题

嘿,别担心,作为编程新手遇到这种情况太正常啦!咱们一步步来搞定你的问题:

问题根源

你现在用$(this).val()来获取fund_idday的值,但$(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(),
    
    注意你的日期输入框nameday,后端要对应接收这个参数名哦。
  • 调试时可以在submit事件开头加console.log(fund_id, day),快速确认值有没有正确拿到。

内容的提问来源于stack exchange,提问作者David Hangula

火山引擎 最新活动