我有一个Django应用程序,其中模板在javascript中包含for循环,它迭代某些表中的所有复选框。对于每个复选框,我向视图函数发送ajax请求,其中我想在列表中保存复选框的id或从列表中删除id(取决于检查状态)。我需要列表成为request.session字典的一部分。 结果显示,ajax调用是异步的,这使得我的列表被错误地更新,并且不一致。 是否有一些线程安全的数据结构,我可以将其存储为会话的一部分,并确保同步列表更新?
JavaScript和Ajax:
"java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {com.example.foodiepipe.foodiepipe/com.example.foodiepipe.foodiepipe.MainActivity}: java.lang.NullPointerException\n\tat android.app.ActivityThread.deliverResults(ActivityThread.java:3500)\
查看功能:
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);
}
答案 0 :(得分:1)
我所要做的就是将async选项设置为false作为请求参数的一部分。
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",
async: false,
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);
}