Все просто, ты пытаешься работать с html data=* атрибутом через .data() метод jquery, что не совсем одно и тоже.
Сделай это через метод .attr(). Например, если исправить код вот здесь:
var action = $(this).attr('data-action');
то твой пример заработает (т.е. id у тебя нигде не используется).
Почему не работает .data()? А вот
почему:
The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).
Т.е. используется этот метод только для сбора данных со страницы единожды, далее с этими данными работать можно только через .data() метод внутри jquery (изменять, удалять, дополнять).