使用Ajax从数据库生成select下拉选项出现NaN无内容问题排查
问题原因及修复方案
核心错误点
- 字符串拼接语法错误:你在拼接select标签和返回的option字符串时,连续写了两个加号:
连续的"<select name='drug[]'' class='form-control'>" + + data ++会被JS解析为一元加号运算符,会尝试把你返回的HTML字符串强制转换为数字,转换失败就得到了NaN,这就是select内容变成NaN的直接原因。 - HTML属性语法错误:select标签的
name属性末尾多写了一个多余的单引号name='drug[]'',导致HTML属性解析异常,就是你审查元素看到的'=""异常属性的来源。
修正后的点击监听代码
$("#add_prescription").click(function(e) { e.preventDefault(); $.ajax({ type: 'GET', url: 'drugs', success: function(data) { $('#prescription-container').append(" <div class='row'> <div class='col-md-6'>" + "<div class='form-group'>" + // 修正了name属性多余的单引号,去掉了多余的加号 "<label for='drug' class='form-label'>Medicine </label><select name='drug[]' class='form-control'>" + data + "</select>" + "</div>" + "</div>" + "<div class='col-sm-6'>" + "<div class='form-group'>" + "<label>Comment</label>" + "<div class='phone-icon'>" + "<input type='text' class='form-control' name='diagnosis'>" + "</div>" + "</div>" + "</div>" + "</div>") } }) })
额外优化建议
你其实不需要在后端拼接option的HTML代码,直接返回原始的药品数组即可,前端处理拼接更符合前后端分离的规范,也更灵活。
内容的提问来源于stack exchange,提问作者The Only Smart Boy
相关产品推荐
相关产品推荐

