JQuery ajax呼び出しを使用して、あるWebページから別のWebページに数値(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);
}
});
});
/ components/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&terid = 2)であることがわかります。したがって、成分ビューはterid = 2のみを取得します。何が間違っているのですか?
EDIT:明確にするために、ourid変数が成分ビューのフィルターに値[1、2]を渡す必要があります。
元の問題の解決策を見つけました。答えとしてここに投稿してください、うまくいけば誰かに役立つでしょう。
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);
}
});
});
/ components/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)
この配列には、ビューでrequest.POST.getlist( 'terid []')によってアクセスできます。
javascriptで:
$.post(postUrl, {terid: values}, function(response){
alert(response);
});
view.pyで:
request.POST.getlist('terid[]')
それは私にとって完璧に機能します。
ここで配列を文字列に設定しているようです
data: {'terid': values},
そのはず
data: {terid: values}
この部分はあなたの問題です:
ourid = request.POST.get('terid', False)
ingredients = Ingredience.objects.filter(food__id__in=ourid)
JSON文字列を逆シリアル化する必要があります。
import json
ourid = json.loads(request.POST.get('terid'))
次のようなデータを送信してみてください。
data: values;