所以我遇到了一个我无法解决的问题。我正在建立一个跟踪学生出勤率的应用程序。我需要AJAX调用来更改DOM并禁用学生的复选框(如果他们在场)。这应该在将有关其入口时间的数据输入数据库之后发生。
为清楚起见:
'#出勤'是带有复选框'
的表单'输入#SELECT_ALL'是一个功能,它检查表单中的所有框以方便
'输入#左'是每个复选框的ID。 AJAX调用的success子句中的函数调用几乎与我构建的单独函数相同,它检查所有框,除了它禁用那些复选框(所以我怀疑这是一个问题,无论如何我不能禁用select_all框) 。
我有一个工作的ajax电话:
var frm = $('#attendance');
frm.submit(function(){
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm,
success: function(data){
$('input#select_all').prop('disabled',true)
$('input#left').each(function(){
if (this.checked == true){
this.prop('disabled',true);
}
});
}
});
return false;
});
成功发布了Django视图,视图更新了数据库中的考勤表:
def incoming(request):
data = request.POST
class_name = request.POST['class_name']
list = [x for x in data.iterlists() if x[1][0] == 'on']
names = [str(x[0]) for x in list]
c = Class.objects.get(title=class_name)
for x in names:
n = Student.objects.get(name=x)
attendance_query = Attendance.objects.get(class_instance=c.id, student=n.id)
attendance_query.student_present = timezone.now()
attendance_query.save()
return HttpResponse(status=204)
整件事情很棒!除非ajax调用完全被说完并且没有调用成功函数。基本上似乎即使它获得HTTP响应,ajax调用仍然认为它没有成功。我是否有任何关于如何使这件事发挥作用的想法?
我基本上希望当前学生的复选框被禁用,这样他们就不能以错误的时间更新他们的出勤率。我还想禁用select_all复选框,因为它仍然可以选择禁用复选框。
那么我如何得到我的AJAX调用以运行其成功函数?我感到困惑。
我尝试过的一些事情:
更改成功功能以将参数作为输入。这样做了,除了它只是将浏览器发送到空白页面,这违背了进行ajax调用的目的。
编辑:所以我添加了一个单独的函数,在单击按钮后执行dom效果。我应该早点做到这一点,并且我有点不必要地复杂了ajax调用。但是,我仍然想知道为什么成功函数没有运行。