If this table doesn’t have too much record, I think Mario’s idea is a good one. You can play everything in a json and save it to html. If not, you can make an ajax while the guy type:
var $input = $('.search');
$input.on('keyup', function(e) {
    // O que vai buscar
    var needle = $.trim($suggestInput.val());
    // Precisa ter ao menos 3 caracteres
    if(needle.length < 3) {
        if(needle.length > 0 || code == 27)
            $suggestContainer.fadeOut('fast');
        return false;
    }
    // Se foi o último buscado não busca de novo
    if(needle == $input.attr('data-last')) {
        // Aqui você mostra os resultados
        return false;
    }
    // Mostra o loading...
    // Se já tem alguma requisição em andamento, cancela ela
    if(ajaxRequest && ajaxRequest.readyState != 4){
        ajaxRequest.abort();
    }
    // Faz a busca
    ajaxRequest = $.ajax({
        url: '/search-trainings',
        type: 'GET',
        dataType: 'json',
        data: {q: needle},
    }).done(function(result) {
        $input.attr('data-last', needle);
        // Faz aqui o que você precisa
    }).fail(function() {
        // Se der erro na requisição
    }).always(function() {
        // Retira o loading
    });
});
							
							
						 
I understand you want to work with asynchronous calls. See if you have anything here that can help you https://stackoverflow.com/questions/14236296/asynchronous-function-call-in-php. you probably already have it fixed link here
– Michael Lelis