18

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 /ビュー:

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);
            }
    });       
});

/ components /ビュー:

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 に答える