Я учусь веб-разработке на Django. Я только что узнал, как размещать данные в форме через AJAX. Теперь у меня возникли проблемы с возвратом результатов данных.
Ниже хорошо работает функция POST
def cat_select(request):
cat_selected=[]
if request.method=='POST': #raise MultiValueDictKeyError when GET in the browser due to vertical having multiple values
cat_name=['l2','l3']
cat_selected=[request.POST[x].split(',') for x in cat_name]
print(cat_selected)
else:
cat_name=['l2','l3']
cat_selected=[request.GET[x].split(',') for x in cat_name]
cat_selected=get_result(["US"],cat_selected)
print(cat_selected)
return JsonResponse({'cat':cat_selected},safe=False)
<form id="cat_select">{% csrf_token %}
<input class="site" name="site" type="text">
<input class="l2" name="l2" id="l2" type="text" style="width:30%">
<input class="l3" name="l3" id="l3" type="text" style="width:50%">
<br>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit" id="cat_submit">Submit</button>
</form>
<script type="text/javascript">
$(document).on('submit','#cat_select',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:'/cat_select',
data:{
l2:$('#l2').val(),
l3:$('#l3').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
},
success: function(){
alert ("selected!")
}
});
});
</script>
Я попытался добавить ниже в $(document).on('submit','#cat_select',function(e){
, но консоль напечатанаОшибка
$.ajax({
method:'GET',
url:'/cat_select',
success:function(data){
console.log(data);
},
error:function(data){
console.log('Error!');
}
});
Internal Server Error: /cat_select
Traceback (most recent call last):
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\django\utils\datastructures.py", line 78, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'l2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Desktop\searchsite2\esearch\views.py", line 83, in cat_select
cat_selected=[request.GET[x].split(',') for x in cat_name]
File "C:\Users\Desktop\searchsite2\esearch\views.py", line 83, in <listcomp>
cat_selected=[request.GET[x].split(',') for x in cat_name]
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\django\utils\datastructures.py", line 80, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'l2'
Я до сих пор не совсем уверен, что послужило причиной MultiValueDictKeyError
после прочтения других постов. Я выбрал два значения, но это было предназначено для множественного выбора.
Как я могу избавиться от этой ошибки? Спасибо.