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

Laravel使用AJAX实现二级联动下拉框返回NaN问题排查

问题原因及修复方案

1. 核心错误:字符串拼接符号误用

你在构造Option显示文本时错误使用了算术减号-,JS执行时会尝试把row.id(数字类型)和row.nomSociete(字符串类型)都转为数字做减法运算,nomSociete转数字失败就会返回NaN。
把减号替换为字符串拼接用的加号+即可,如果需要横杠作为分隔符,要把横杠用引号包裹成字符串:

// 错误写法
new Option(row.id- row.nomSociete ,row.id )
// 正确写法,示例显示格式为「1-XX贸易公司」
new Option(row.id + '-' + row.nomSociete ,row.id )

你注释掉的那行append代码也存在相同问题,row.id- row.nomSociete处的减号需要同步修改。

2. 可优化的次要问题

控制器代码优化

Laravel支持直接返回集合/数组,框架会自动转为JSON响应,不需要手动调用json_encode,同时你select查询里重复写了两次fournisseurs.id,可以删除冗余字段:

public function get_fournisseurs($id){
    $fou= DB::table('four_cat')
        ->join('fournisseurs','four_cat.four', '=', 'fournisseurs.id')
        ->where('four_cat.cat','=', $id)
        ->select('fournisseurs.id','fournisseurs.nomSociete','fournisseurs.tel')
        ->get();
    return response()->json(['data' => $fou]);
}

AJAX代码优化

每次切换第一个下拉框的选项时,先清空第二个下拉框的旧选项,避免多次切换后选项累加:

success: function(dataResult){
    var resultData = dataResult.data;
    // 清空已有选项
    $('#second-choice').empty();
    $.each(resultData,function(i,row){
        $('#second-choice').append(new Option(row.id + '-' + row.nomSociete ,row.id ));
    })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:00:05