Javascript 编写此函数的更有效方法?(德扬戈,阿贾克斯)
我现在编写函数的方式很有效,我只是想知道是否有更好或更有效的方法来编写它。这是一个ajax调用,它获取一个列表以进一步过滤地理信息,例如,如果选择了county,那么它将获取该州所有县的列表。 我仍在学习编码,希望更好地使用好的编码实践Javascript 编写此函数的更有效方法?(德扬戈,阿贾克斯),javascript,python,ajax,django,Javascript,Python,Ajax,Django,我现在编写函数的方式很有效,我只是想知道是否有更好或更有效的方法来编写它。这是一个ajax调用,它获取一个列表以进一步过滤地理信息,例如,如果选择了county,那么它将获取该州所有县的列表。 我仍在学习编码,希望更好地使用好的编码实践 $.ajax({ url : "filters", type : "POST", data : { search : selected_state, geog : selected_geog },
$.ajax({
url : "filters",
type : "POST",
data : { search : selected_state, geog : selected_geog },
success: function(data) {
$.each(data, function(i, v) {
switch(selected_geog) {
case 'County':
case 'Dma':
filters.push(v.fields.name);
break;
case 'Zip':
var exists = $.inArray(v.fields.zcta, data_check);
if (exists < 0) {
data_check.push(v.fields.zcta);
}
data_check.sort();
var exists2 = $.inArray(v.fields.county, filters);
if (exists2 < 0) {
filters.push(v.fields.county);
}
filters.sort();
break;
case 'CD':
filters.push(v.fields.cd114fp);
break;
case 'Zones':
var exists = $.inArray(v.fields.p_dma, filters);
if (exists < 0) {
filters.push(v.fields.p_dma);
}
filters.sort();
var exists2 = $.inArray(v.fields.owner, attrfilters);
if (exists2 < 0) {
attrfilters.push(v.fields.owner);
}
SHPconverter.attrfilters.sort();
var exists3 = $.inArray(v.fields.scode, data_check);
if (exists3 < 0) {
data_check.push(v.fields.scode);
}
data_check.sort();
break;
}
})
}
})
通过创建以元组作为值的字典查找,可以减少整个if语句部分
geo_lookup = {'County': (County, ['state', 'name']),
'DMA': (Dma, ['state', 'name']),
'CD': (Cd, ['state', 'cd']),
'Zip': (Zip, ['state', 'county']),
'Zones': (Zones, ['sname']),
}
lookup_model = geo_lookup[geogVar][0]
ordering = geo_lookup[geogVar][1]
as_json = serialize('json', lookup_model.objects.filter(state__in=searchVar).order_by(*ordering))
return HttpResponse(as_json, content_type='json')
您似乎也在尝试序列化模型,Django Rest Framework专门从事这项工作,因此仅使用它将不再需要您在视图中手动执行所有这些操作。Try
geo_lookup = {'County': (County, ['state', 'name']),
'DMA': (Dma, ['state', 'name']),
'CD': (Cd, ['state', 'cd']),
'Zip': (Zip, ['state', 'county']),
'Zones': (Zones, ['sname']),
}
lookup_model = geo_lookup[geogVar][0]
ordering = geo_lookup[geogVar][1]
as_json = serialize('json', lookup_model.objects.filter(state__in=searchVar).order_by(*ordering))
return HttpResponse(as_json, content_type='json')