我正在尝试使用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);
}
});
});
/ ingredients / view:
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&amp; terid = 2)。所以我的成分视图只选择了terid = 2。我做错了什么?
修改 为了澄清,我需要将ourid变量传递值[1,2]添加到成分视图中的过滤器。
答案 0 :(得分:34)
您可以在视图中 request.POST.getlist('terid []')访问此数组
在javascript中:
$.post(postUrl, {terid: values}, function(response){
alert(response);
});
在view.py中:
request.POST.getlist('terid[]')
它对我来说很完美。
答案 1 :(得分:4)
我找到了原始问题的解决方案。在这里发布它作为答案,希望它有助于某人。
<强> 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);
}
});
});
/ ingredients / view:
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)
答案 2 :(得分:2)
这部分是你的问题:
ourid = request.POST.get('terid', False)
ingredients = Ingredience.objects.filter(food__id__in=ourid)
您需要反序列化JSON字符串。
import json
ourid = json.loads(request.POST.get('terid'))
答案 3 :(得分:2)
您似乎将数组设置为字符串
data: {'terid': values},
应该是
data: {terid: values}
答案 4 :(得分:0)
尝试发送如下数据:
data: values;