У вас в коде только добавление новых элементов в список, а следовательно старые не удаляются. попробуйте вставить между $.getJSON('api.php', function(data) { и $.each(data, function(key, val) команду очищения списка:
$('ul').empty();
Должно получиться так:
function getData(){
$.getJSON('api.php', function(data) {
$('ul').empty();
/* data will hold the php array as a javascript object */
$.each(data, function(key, val) {
$('ul').append('<li id="' + key + '">' + val.date + ' ' + val.event + ' ' + val.region + ' ' + val.host + ' '+ val.type + ' ' + val.info + '</li>');
});
setTimeout(getData, 5000);
});
}