用bootstrap做下拉菜单,并使用jQuery实现从服务器异步加载下拉菜单的item。
前台代码:
<div class="form-group">
<label class="col-md-2 control-label" for="phone_num">设备分中心</label>
<div class="col-md-8">
<input class="form-control" name="phone_num1" type="text" id="phone_num" placeholder="" value="" required />
</div>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="unitid" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
选择<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="unitid" id="unitItem">
</ul>
</div>
</div>
$("#unitid").bind("click", function () {
$.ajax({
url: "/control/showunit/",
dataType: "json",
success: function (data) {
$.each(data, function (index, units) {
$("#unitItem").append("<li><a href='#'>" + units.unit + "</a></li>");
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error");
}
});
});
后台代码:
<pre name="code" class="python">def showunit (request):
'''显示所有公司的视图'''
start=request.POST.get('start','')
logging.info(start)
logging.info('hsa')
s_list = []
allunit= Unit.objects.all()
for item in allunit:
comptuple = {}
comptuple['id'] = item.unitidx1
comptuple['unit'] = item.name1
s_list.append(comptuple)
s_list=set_dict(s_list)
total_count = len(s_list)
root_name = 'units'
#data = '{"total":%s,%s:%s}' %(total_count,root_name,simplejson.dumps(s_list))<span style="color:#33cc00;">#这种格式不是严格的json格式,返回时执行error函数;</span>
data = '%s' %(simplejson.dumps(s_list))
return HttpResponse(data,mimetype='text/javascript;')
#后台必须返回严格的json格式数据,否则ajax不执行success回调而是执行了error回调
诶,起先在前台修改了好几次代码,每次后台成功返回了数据,但不执行success函数,执行error函数,后来经过搜索发现应该是后台返回的json数据并不是严格的json格式,主要是参考了这篇文章 ajax不执行success回调而是执行了error回调。