在 ajax 中更新 twig for 循环
update twig for loop in ajax
我正在做聊天室项目,并尝试用 ajax 更新用户状态。
问题是一个用户可能有多个好友,所以首先我使用twig for循环显示所有好友,像这样,函数getLastActivity()是获取用户的最后在线时间,如果它大于当前时间, 然后显示用户在线。
{% for user in users%}
{% if app.user.name != user.getName() %}
<div id="status">
{% if getLastActivity(user.getId()) > date("now + 8 hours - 10 seconds") %}
<span class="online_icon"></span>
{% else %}
<span class="online_icon offline"></span>
{% endif %}
</div>
{% endif %}
{% endfor %}
我不太擅长ajax,如果有什么奇怪的地方请告诉我。我的想法是每 3 秒更新一次状态字段。但它只能更新第一个朋友。
我的猜测是,因为在twig模板中我只写了一次,所以它没有更新其余的朋友。
$(document).ready(function () {
setInterval(function(){
update_status();
}, 3000);
function update_status()
{
$.ajax({
success:function(){
$('#status').load(" #status");
}
})
}
})
我受到这篇文章的启发,,但不确定如何在我的问题中实现它。
我的问题是,是否可以使用ajax来更新所有好友状态,或者有更好的方法来实现这一点。
谢谢
您遇到的问题是您为每个用户创建了一个 ID 为 status 的元素。 ID 是 唯一标识符,但您对每个元素使用相同的标识符。
例如,您可以根据用户 obj 创建具有 id 的元素:
{% for user in users%}
{% if app.user.name != user.getName() %}
<div id="status-{{ user.id }}">
{* ... *}
</div>
{% endif %}
{% endfor %}
我不知道您的 update_status() 函数到底是什么样子,但您需要以某种方式获取用户 ID。您可以 return 它作为 ajax,像这样:
$.ajax({
success: function(userId){
$('#status-' + userId).load(" #status");
}
})
或者您遍历所有元素,您将使用 el.attr('id').
获得 id
我正在做聊天室项目,并尝试用 ajax 更新用户状态。
问题是一个用户可能有多个好友,所以首先我使用twig for循环显示所有好友,像这样,函数getLastActivity()是获取用户的最后在线时间,如果它大于当前时间, 然后显示用户在线。
{% for user in users%}
{% if app.user.name != user.getName() %}
<div id="status">
{% if getLastActivity(user.getId()) > date("now + 8 hours - 10 seconds") %}
<span class="online_icon"></span>
{% else %}
<span class="online_icon offline"></span>
{% endif %}
</div>
{% endif %}
{% endfor %}
我不太擅长ajax,如果有什么奇怪的地方请告诉我。我的想法是每 3 秒更新一次状态字段。但它只能更新第一个朋友。
我的猜测是,因为在twig模板中我只写了一次,所以它没有更新其余的朋友。
$(document).ready(function () {
setInterval(function(){
update_status();
}, 3000);
function update_status()
{
$.ajax({
success:function(){
$('#status').load(" #status");
}
})
}
})
我受到这篇文章的启发,
我的问题是,是否可以使用ajax来更新所有好友状态,或者有更好的方法来实现这一点。
谢谢
您遇到的问题是您为每个用户创建了一个 ID 为 status 的元素。 ID 是 唯一标识符,但您对每个元素使用相同的标识符。
例如,您可以根据用户 obj 创建具有 id 的元素:
{% for user in users%}
{% if app.user.name != user.getName() %}
<div id="status-{{ user.id }}">
{* ... *}
</div>
{% endif %}
{% endfor %}
我不知道您的 update_status() 函数到底是什么样子,但您需要以某种方式获取用户 ID。您可以 return 它作为 ajax,像这样:
$.ajax({
success: function(userId){
$('#status-' + userId).load(" #status");
}
})
或者您遍历所有元素,您将使用 el.attr('id').
获得 id