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特定post对象的属性。我已经设法发送和接收 ajax 请求,但无法理解如何选择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);
        }      

    });
});

现在这是一个非常普遍的示例,您可能需要对其进行大量更改。也许您需要将徽章作为可点击对象,您可能想要发送更多数据。我猜你的意思是发送一个带有“post”类型的ajax请求,因为你提到数据正在改变,在这种情况下你还必须包含csrf令牌(我正在使用的函数getCookie取自django 文档,请参见此处),您可能希望将其作为标题传递,而不是作为发布数据的一部分。

此外,返回的数据不必是 json,这取决于您需要在客户端对它做什么 - 如果它很简单,例如发送一个数字或一些文本,那么您可以使用简单的 HttpResponse,但如果它是一个你想使用javascript迭代的对象你想在服务器端使用json.dumps,然后$.parseJSON(data)在服务器端使用。

另外,不要忘记为 ajax 请求失败时发生的情况创建一个函数(google it)。我想你可以从这里拿起它

于 2013-10-06T10:46:15.380 回答