Эта строка в вашем коде фактически очищает весь ваш контейнер, поэтому у вас там только последний:
$(".tweets").html('Retrieving...');
Одним из решений может быть создание разметки примерно так:
<div id="ajax_tweets" class="tweets">
<div id="ajax_message"></div>
</div>
... и измените свой код, чтобы обновить этот элемент и вставить новые твиты перед ним:
$(document).ready(function() {
window.setInterval(ajax_test, 10000);
counter = 0;
var $message = $("#ajax_message");
function ajax_test() {
$message.html('Retrieving...');
$.ajax({
type: "POST",
url: "assets/ajax/get_latest_tweets.php",
data: "tid=" + id,
timeout: 20000,
success: function(msg) {
$message.html('');
if (msg != "") {
add_to_tweet_feed( msg );
id++;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$message.html('Timeout contacting server..');
}
});
}
function add_to_tweet_feed ( msg ) {
$(msg).insertBefore($message);
}
});
Редактировать: Исправлена ошибка в вышеприведенном коде (неправильное использование insertBefore()
). Кроме того, если вас беспокоит порядок, в котором ваши запросы возвращаются, вы можете добавить заполнители и заменить их в случае успеха или удалить их в случае сбоя:
$(document).ready(function() {
window.setInterval(ajax_test, 10000);
counter = 0;
var $message = $("#ajax_message");
function ajax_test() {
$message.html('Retrieving...');
var $placeholder = $('<div></div>').insertBefore($message).hide();
$.ajax({
type: "POST",
url: "assets/ajax/get_latest_tweets.php",
data: "tid=" + id,
timeout: 20000,
success: function(msg) {
$message.html('');
if (msg != "") {
add_to_tweet_feed(msg, $placeholder);
id++;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$placeholder.remove();
$message.html('Timeout contacting server..');
}
});
}
function add_to_tweet_feed (msg, $placeholder) {
$placeholder.show().replaceWith(msg);
}
});