在模板中,我正在显示名为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}
希望我能清楚自己。请帮忙。
答案 0 :(得分:1)
我可能会选择这样的东西:
<p class="post-points" id="{{ post.pk }}">{{ post.points }}</p>
然后我有一个锚从每个dom elemnt抓住post 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文档,请参阅here),您可能希望将其作为标题传递,而不是作为帖子数据的一部分。
此外,返回的数据不一定是json,它取决于你在客户端需要做什么 - 如果发送一个数字或一些文本很简单,那么你可以使用简单的HttpResponse,但如果它是你想要使用javascript迭代的对象,你想在服务器端使用json.dumps,然后在服务器端使用$.parseJSON(data)
。
另外,不要忘记创建一个函数,以便在ajax请求失败时发生(google it)。我想你可以从这里拿起来