从django ajax函数返回多个变量

时间:2012-03-10 18:05:40

标签: ajax django

我正在构建一个Django待办事项列表。将任务标记为完成的复选框具有ajax:

//Checkbox toggles
$('input:checkbox').click(function() {
    if ($(this).attr('checked')) {
        $action = true;
    } else {
        $action = false;
    }

    $.ajax({
        type: "POST",
        url: "/gtd/action/" + this.id.split("_")[1] + "/" + $(this).val() + "/" + $action + "/",
        success: function(data) {
            //Update entire gtd side menu
        }
    })
});

在ajax的成功部分,我需要更新侧边菜单中的多个变量(与未完成任务的计数有关)。 django视图可以计算变量

def ajax_click(request, modelname, id, type, toggle):

    #Do some stuff to save the object

    action_count = actions = Action.objects.filter(complete=False, onhold=False).count()
    hold_count = Action.objects.filter(onhold=True, hold_criteria__isnull=False).count()

    return HttpResponse('')

问题是,如何将多个变量传递回ajax函数?在这个例子中,我有action_count和hold_count。如何将这些变量恢复到成功函数?

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是从视图中返回一些JSON。如下所示:

import json
data = json.dumps({
        'actions': action_count,
        'holds': hold_count,
    })
return HttpResponse(data, content_type='application/json')

然后,您的客户端代码可以提取所需的信息;因为你正在使用jQuery的东西,它可以通过在传递给dataType: "json"调用的对象中设置$.ajax()来自动解析JSON,以便传递给你的成功函数。