18

我正在尝试使用 jQuery ajax 调用将数值(id)列表从一个网页传递到另一个网页。我不知道如何传递和读取列表中的所有值。我可以成功发布和读取 1 个值,但不能成功读取多个值。这是我到目前为止所拥有的:

jQuery:

var postUrl = "http://localhost:8000/ingredients/";
$('li').click(function(){
    values = [1, 2];
    $.ajax({
        url: postUrl,
        type: 'POST',
        data: {'terid': values},
        traditional: true,
        dataType: 'html',
        success: function(result){
            $('#ingredients').append(result);
            }
    });       
});

/成分/视图:

def ingredients(request):
    if request.is_ajax():
        ourid = request.POST.get('terid', False)
        ingredients = Ingredience.objects.filter(food__id__in=ourid)
        t = get_template('ingredients.html')
        html = t.render(Context({'ingredients': ingredients,}))
        return HttpResponse(html)
    else:
        html = '<p>This is not ajax</p>'      
        return HttpResponse(html)

使用 Firebug,我可以看到 POST 包含两个 ID,但可能格式错误(terid=1&terid=2)。所以我的成分视图只选择 terid=2。我究竟做错了什么?

编辑: 为了澄清,我需要 ourid 变量将值 [1, 2] 传递给成分视图中的过滤器。

4

5 回答 5

49

您可以在视图中通过request.POST.getlist('terid[]')访问该数组

在 JavaScript 中:

$.post(postUrl, {terid: values}, function(response){
    alert(response);
});

在 view.py 中:

request.POST.getlist('terid[]')

它对我来说很完美。

于 2012-11-14T17:31:02.323 回答
9

我找到了解决我原来问题的方法。在这里发布它作为答案,希望它可以帮助某人。

jQuery:

var postUrl = "http://localhost:8000/ingredients/";
$('li').click(function(){
    values = [1, 2];
    var jsonText = JSON.stringify(values);
    $.ajax({
        url: postUrl,
        type: 'POST',
        data: jsonText,
        traditional: true,
        dataType: 'html',
        success: function(result){
            $('#ingredients').append(result);
            }
    });       
});

/成分/视图:

def ingredients(request):
    if request.is_ajax():
        ourid = json.loads(request.raw_post_data)
        ingredients = Ingredience.objects.filter(food__id__in=ourid)
        t = get_template('ingredients.html')
        html = t.render(Context({'ingredients': ingredients,}))
        return HttpResponse(html)
    else:
        html = '<p>This is not ajax</p>'      
        return HttpResponse(html)
于 2012-06-24T21:13:25.967 回答
3

这部分是你的问题:

ourid = request.POST.get('terid', False)
ingredients = Ingredience.objects.filter(food__id__in=ourid)

您需要反序列化 JSON 字符串。

import json
ourid = json.loads(request.POST.get('terid'))
于 2012-06-24T10:22:53.423 回答
1

看来您在这里将数组设置为字符串

data: {'terid': values},

它应该是

data: {terid: values}
于 2012-06-24T12:24:56.160 回答
0

尝试像这样发送数据:

   data: values;
于 2012-06-24T10:21:00.910 回答