You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ajax保存模态框数据时,复选框值无法存入数据库的问题

问题分析

你遇到的核心问题是变量作用域不匹配:你在#saveRoute的点击事件里收集了选中的复选框值,但这个categories变量是该点击事件函数的局部变量,外面独立的saveRoute()函数根本访问不到它。所以当AJAX发送请求时,categories实际上是undefined,传到后端自然就变成了null。

看你的代码细节:

  • 第一个代码块里的categories只存在于$('#saveRoute').click()的回调函数内部,外部无法访问。
  • 第二个代码块的saveRoute()函数里写了var categories = categories;,这相当于声明了一个变量但没赋值,结果就是undefined。
解决方案

最直接的修复方式是把收集复选框值的逻辑移到saveRoute()函数内部,这样就能在发送AJAX请求前实时获取选中的复选框值。

修改后的saveRoute()函数如下:

function saveRoute(){ 
    // 先实时收集选中的复选框值
    var myCat = [];
    $.each($("input[name='categories']:checked"), function(){
        myCat.push($(this).val());
    });
    var categories = myCat.join(", ");

    var active = ""; 
    var from_location = $('#from_location').val(); 
    var to_location = $('#to_location').val(); 
    var leaving_date = $('#leaving_date').val(); 
    var return_job = $('#return_job').val(); 
    var route_name = $('#route_name').val(); 
    var expires = ""; 
    var user_id = <?php echo $my_id; ?>; 
    var type_of_vehicle = $('#type_of_vehicle').val(); 

    $.ajax({ 
        url:'<?php echo site_url('router/add_route');?>', 
        method:'POST', 
        data:{ 
            active : 'Yes', 
            from_location : from_location, 
            to_location : to_location, 
            categories : categories, // 现在这个变量有正确的选中值了
            leaving_date : leaving_date, 
            return_job : return_job, 
            route_name : route_name, 
            expires : '2018-05-15', 
            user_id : user_id, 
        }, 
        success: function(data) { 
            alert(categories); 
            console.log(data); 
            $('#routeModal').modal('hide'); 
            alert('Route has been successfully added'); 
            location.reload(); 
        } 
    }); 
}

同时,你可以删掉原来单独的$('#saveRoute').click()事件绑定代码,确保你的按钮点击是直接调用saveRoute()(比如按钮上写onclick="saveRoute()")。

额外优化建议
  • 可以给复选框的选择器加父元素限定,比如$('#routeModal input[name="categories"]:checked'),避免页面其他地方同名的复选框干扰。
  • 如果后端支持数组接收,也可以直接传myCat数组(不用join成字符串),后端用$_POST['categories']就能拿到数组,后续分类处理会更灵活。

内容的提问来源于stack exchange,提问作者Husein Hamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:45:20