0

テンプレートでは、次のpostsように呼び出されるデータベース オブジェクトを表示しています。

{% for post in posts %}
....
....
<div class="pull-left">
      <span class="badge" >
          <p class="post-points">{{post.points}}</p>
      </span>
     </div>
...
...
    {% endfor %}

ajax リクエスト Id を使用して、特定のオブジェクトのpost.points属性を変更します。postajax リクエストを送受信できましたが、postオブジェクトを選択してそのpost.points値を変更する方法を理解できませんでした。

説明のために、これが ajax リクエストを処理した後のサーバーからの json レスポンスであると仮定します。

{'post_id': some post's id,
'post_points': some value}

私の自己を明確にすることを願っています。助けてください。

4

1 に答える 1

2

私はおそらく次のようなものに行きます:

<p class="post-points" id="{{ post.pk }}">{{ post.points }}</p>

次に、各 dom 要素からポスト pk を取得するためのアンカーがあります。それを ajax と一緒に送信すると、サーバーはあなたが話している投稿を認識し、その<p>タグ内の値を応答に置き換えます。

編集

任意のポイントをクリックすると、この呼び出しが発生するとします。

$('.post-point').on(click, function() {
    var point = $(this),
        pk = point.attr('id'),
        csrf = getCookie('csrftoken'); 

    data = {'pk': pk, 'csrfmiddlewaretoken': csrf }

    $.ajax({
        url: 'post_url',
        data: data,
        type: 'post',
        success: function(data) {
            point.html(data);
        }      

    });
});

これは非常に一般的な例であり、おそらく大幅に変更する必要があります。バッジをクリック可能なオブジェクトにする必要がある場合や、さらにデータを送信する必要がある場合があります。データが変更されていると述べたので、「投稿」タイプの ajax リクエストを送信するつもりだと推測しました。その場合、csrf トークンも含める必要があります (私が使用している関数 getCookie はdjango ドキュメント (こちらを参照) を参照してください)、投稿データの一部としてではなく、ヘッダーとして渡したい場合があります。

また、返されるデータは json である必要はありません。クライアント側で何をする必要があるかによって異なります。数字やテキストを送信するだけの簡単な場合は、単純な HttpResponse を使用できますが、サーバー側でjson.dumpsを使用してからサーバー側で使用するjavascriptを使用して反復処理するオブジェクト$.parseJSON(data)

また、ajax リクエストが失敗した場合にどうなるかを示す関数を作成することを忘れないでください (google it)。ここから拾えると思います

于 2013-10-06T10:46:15.380 に答える