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

Django+AJAX三级联动下拉框:道路框显示undefined问题求助

问题分析与解决方案

嘿,我一眼就发现导致道路下拉框显示undefined的核心原因了——前端获取道路数据时用错了字段名!

问题根源

在home.html的道路加载AJAX回调里,你写的是:

$("#selectroads").append('<option>'+ result[i].Vil +'</option>');

但你的后端views.py中getRoads函数返回的字段明明是name:

result_set.append({'name': road.name})

控制台能输出正确结果是因为后端返回的数据没问题,但前端拿错了字段,自然就显示undefined了。

修复步骤

1. 修正道路下拉框的字段引用

把home.html里的道路加载回调代码改成:

for (var i = result.length - 1; i >= 0; i--) {
    $("#selectroads").append('<option>'+ result[i].name +'</option>');
};

嫌倒序循环麻烦的话,也可以用更简洁的$.each写法:

$.each(result, function(index, road) {
    $("#selectroads").append(`<option>${road.name}</option>`);
});

2. 顺便修复国家下拉框的小bug

你的国家下拉框option标签里用了val="{{ item.name }}",这是错误的HTML属性,标准写法应该是value="{{ item.name }}":

<select name="selectcountries" id="selectcountries">
{% for item in countries %}
<option value="{{ item.name }}"> {{ item.name }} </option>
{% endfor %}
</select>

3. 可选优化:用ID传递数据更可靠

目前你通过名称查询城市和道路,一旦出现重名数据就会出问题。建议改成传递模型ID:

  • 国家下拉框option的value设为item.id
  • AJAX传递国家ID到后端,用Country.objects.get(id=country_id)查询
  • 同理,城市下拉框option的value设为城市ID,后端用ID查询城市后再获取道路

这种方式能避免名称重复导致的查询错误,让代码更健壮。

验证修复

修改完成后,选择城市就能看到道路下拉框正确显示对应名称,控制台输出和页面展示也能完全对应上了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:07:00