У меня есть приложение Django, где шаблон содержит для цикла в javascript, который выполняет итерацию всех флажков в некоторой таблице. Для каждого флажка я отправляю запрос ajax функции просмотра, где я хочу сохранить идентификатор этого флажка в списке или удалить идентификатор из списка (зависит от состояния проверки). Мне нужен список, чтобы быть частью словаря request.session. Результаты показывают мне, что вызовы ajax являются асинхронными и что мой список ошибочно обновляется и несовместим. Есть ли какие-то потокобезопасные структуры данных, которые я могу хранить как часть сеанса, и обеспечить обновление списка синхронизации?Обработка асинхронных вызовов ajax в сеансе django
JavaScript и Ajax:
function checkAll(source, type) {
checkboxes = document.getElementsByName(type);
for(var i=0, n=checkboxes.length;i<n;i++) {
if (checkboxes[i].checked != source.checked) {
checkboxes[i].checked = source.checked;
select_row(checkboxes[i], source.checked);
}
}
}
function select_row(row_selector, is_checked) {
is_box_checked = typeof is_checked !== 'undefined' ? is_checked : row_selector.checked;
request = {
url: "{% url 'set_check_box' %}",
type: "POST",
contentType: "application/x-www-form-urlencoded",
data: {
csrfmiddlewaretoken: "{{ csrf_token }}",
checked: is_box_checked,
check_box_id: row_selector.id,
type: row_selector.name
},
error: function(response, status, error_msg) {
console.log(error_msg);
}
};
$.ajax(request);
}
Вид функции:
def set_check_box(request):
request.session.modified = True
check_box_list = list(request.session['connects_check_boxes_id_list'])
check_box_id = request.POST["check_box_id"]
is_checked = json.loads(request.POST['checked'])
if is_checked:
check_box_list.append(check_box_id)
else:
check_box_list.remove(check_box_id)
request.session['connects_check_boxes_id_list'] = list(check_box_list)
return HttpResponse("")
Ну, очевидно, существует асинхронная опция для запросов ajax. Я отправлю свое решение, чтобы оно помогло другим – orizis