Имеется форма с двумя выпадающими списками и одной кнопкой. По нажатию на кнопку отправляются данные в виде json, на основе этих данных выполняется фильтрация, потом отфильтрованные данные возвращаются на клиент. Однако, вместо отфильтрованных данных, выводится ошибка 500 (Internal Server Error)
. В трейсбек выводиться следующее: string indices must be integers
. Как исправить данную ошибку?
Представление:
function GetSelectValue() {
var select_type = document.getElementById("type");
var type = select_type.value;
var select_net = document.getElementById("net");
var net = select_net.value;
var filter = JSON.stringify({type:type, net:net});
return filter
}
$(function () {
$("#btn1").click(function () {
var filter = GetSelectValue();
console.log(filter);
$.ajax({
type: "GET",
dataType: 'json',
url: '/map/filter/',
data: {
'filter': filter
},
success:
function (stations) {
pointLayer.removeAll();
draw_point_layer(stations);
},
error: function (xhr, status, error) {
console.log(error);
}
})
});
});
<body>
<div name="infoDiv" id="infoDiv" class="esri-widget">
<!--<b>Filter by geometry</b><br/><br/>-->
<label for="net">Сеть:</label>
<select id="net" class="options">
<option value="INTERMAGNET">INTERMAGNET</option>
<option value="IMAGE">IMAGE</option>
<option value="EISCAT">EISCAT</option>
<option value="MACCS">MACCS</option>
<option value="CARISMA">CARISMA</option>
<option value="CANMOS">CANMOS</option>
<option value="AUTUMNX">AUTUMNX</option>
<option value="USGS">USGS</option>
<option value="AMN">AMN</option>
<option value="DTU">DTU</option>
<option value="ENIGMA">ENIGMA</option>
<option value="EMMA/PLASMON">EMMA/PLASMON</option>
<option value="Japan Meteorological Agency">Japan Meteorological Agency</option>
<option value="GFZ">GFZ</option>
<option value="Italian Magnetic Network">Italian Magnetic Network</option>
<option value="Mid-continent Magnetoseismic Chain">Mid-continent Magnetoseismic Chain</option>
<option value="Russian Arctic and Antarctic Magnetometer">Russian Arctic and Antarctic Magnetometer</option>
<option value="Finnish Meteorological Institute">Finnish Meteorological Institute</option>
<option value="Swedish Institute of Space Physics">Swedish Institute of Space Physics</option>
<option value="BAS">BAS</option>
<option value="Российско-украинский сегмент геомагнитных данных">Российско-украинский сегмент геомагнитных данных</option>
<option value="all" selected>все</option>
</select>
<label for="type">Тип:</label>
<select id="type" class="options">
<option value="station">станция</option>
<option value="observatory">обсерватория</option>
<option value="all" selected>все</option>
</select
><br/><br/>
<button id="btn1" class="esri-button" id="clearFilter" type="button">
Применить
</button>
</div>
</body>
views.py
from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Station
from django.http import HttpResponse
from django.core import serializers
def filter(request):
if request.GET:
filter = request.GET.get('filter')
type = filter['type']
if type == 'all':
stations = serializers.serialize('json', Station.objects.all())
else:
stations = serializers.serialize('json', Station.objects.filter(type=type))
return HttpResponse(stations, content_type='application/json')
Избавился от данной ошибки, применив метод json.loads()
. Измененный views.py будет выглядеть следующим образом
from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Station
from django.http import HttpResponse
from django.core import serializers
import json
def filter(request):
if request.GET:
filter = request.GET.get('filter')
decoded_filter = json.loads(filter)
type = decoded_filter["type"]
if type == 'all':
stations = serializers.serialize('json', Station.objects.all())
else:
stations = serializers.serialize('json', Station.objects.filter(type=type))
return HttpResponse(stations, content_type='application/json')
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как правильно кусок кода засунуть в encodeURIComponent при отправке ajax запроса?
Привет пример реализации брал от сюда: Пример реализации У меня в blade выглядит код вот так: