【发布时间】:2019-12-11 16:28:42
【问题描述】:
我有一个带有相关下拉列表的表单,每当提交表单时都会加载该下拉菜单,以便在提交表单后再次预加载在提交表单之前选择的主要选项。我注意到,每当页面首次加载而没有传递参数时,我都会收到 GET: 500 Internal Server Error,错误如下所示:
Internal Server Error: /operations/ajax/load-stations/
ValueError at /operations/ajax/load-stations/ invalid literal for int() with base 10: ''
Request URL: http://localhost:8000/operations/ajax/load-stations/?work_area=
Request Method: GET
Status Code: 500 Internal Server Error
因为第一次加载页面时 work_area 是空的 (work_area = "") 并且还没有提交任何表单。如何修改 JS 或函数,以免出现此错误?
enter_exit.html
{% block main %}
<form id="warehouseForm" action="" method="POST" data-stations-url="{% url 'operations:ajax_load_stations' %}" novalidate >
{% csrf_token %}
<div>
<div>
<label>Employee #</label>
{{ form.employee_number }}
</div>
<div>
<label>Work Area</label>
{{ form.work_area }}
</div>
<div id="my-hidden-div">
<label>Station</label>
{{ form.station_number }}
</div>
<!-- Rest of the form -->
</div>
</form>
<script>
function loadStations() {
var url = $("#warehouseForm").attr("data-stations-url");
var workAreaId = $(this).val();
var $stationNumberField = $("#{{ form.station_number.id_for_label }}");
$.ajax({
url: url,
data: {
'work_area': workAreaId
},
success: function (data) {
$("#my-hidden-div").show(); // show it
$stationNumberField.html(data);
// Check the length of the options child elements of the select
if ($stationNumberField.find("option").length === 1) {
$stationNumberField.parent().hide(); // Hide parent of the select node
} else {
// If any option, ensure the select is shown
$stationNumberField.parent().show();
}
}
});
}
$("#id_work_area").change(loadStations);
$("#id_work_area").change();
</script>
{% endblock main %}
views.py
def load_stations(request):
work_area_id = request.GET.get('work_area')
stations = Station.objects.filter(work_area_id=work_area_id).order_by('name')
return render(request, 'operations/station_number_dropdown_options.html', {'stations': stations})
urls.py
urlpatterns = [
url(r'enter-exit-area/$', views.enter_exit_area, name='enter_exit_area'),
url(r'ajax/load-stations/$', views.load_stations, name='ajax_load_stations'),
]
【问题讨论】:
-
你试过if语句吗?如果条件不满足则不运行某些代码是编程中相当基本的核心概念。
标签: javascript python html django ajax