Fulham took the lead in the second half after a very scrappy first 45 minutes through Anthony Knockaert with a spectacular solo effort, before Villa hit back with their heavily rotated side after Anwar El Ghazi poked in Jonathan Kodjia's goalbound lob effort.
However, it would be Fulham who would run out victorious after Harry Arter, who had only been on the pitch for two minutes, scored a cracking 25-yard top corner strike to help the Cottagers progress into the fourth round of the cup.
Story of the match
The game, like all other FA Cup ties this weekend, kicked off one minute late to raise awareness for mental health, in collaboration with Prince William's ‘Heads Up’ campaign.
It was a scrappy opening 45 minutes in which Fulham looked the better of the two sides, but it was the visitors who should have took the lead early on.
Kodjia was presented with a glorious chance in the 10th minute after some poor defending from the home side allowed the Ivorian to glide into the box with ease - but the former Bristol City striker tripped up before being able to pull the trigger.
The next real opportunity would only come another ten minutes later, however this time it would be Fulham who would come close to breaking the deadlock.
A very slick move from The Cottagers followed by a flashy one-two exchange between Joe Bryan - who started as a winger today, and Ivan Cavaleiro almost then presented Josh Onomah with a golden chance, but the former Spurs youngster could not get onto the final ball and Villa cleared their lines.
The away side came back up the other end just minutes later when El Ghazi slid in Kodjia who could get his shot away this time but fired well over from ten yards.
Ahmed Elmohamady, Bryan and Knockaert all were presented half-chances to open the scoring but the biggest chance of the half fell to El Ghazi and Villa on the stroke of half time.
Kodjia battled well against Alfie Mawson before releasing the flying Dutch winger who, bearing down on goal, was unable to put it past Marek Rodak from close range - the Slovakian keeper saving spectacularly to keep the scores level going into half time.
Scott Parker would have been the happier of the two managers at half time, and it was his side who started the brighter side too after the restart.
Knockaert skillfully cut inside from the right-wing and let a venomous shot go but it drifted narrowly wide.
However, in the 54th minute, the former Brighton star was found by Bryan on the halfway line hugging the right touchline; the winger carried the ball a good 25 yards before cutting inside and curling his shot into the top left corner - a goal of the season contender for sure.
Fulham continued their pressure and this time it was Bryan coming close just moments after but the Englishman could not bend his effort past Rodak like his teammate Knockaert managed to.
Villa, however, did manage to find an equaliser in the 64th minute through El Ghazi after a horrible mistake from debutant Fulham Michael Hector.
A long ball was sent over the top in the direction of Kodjia, but Hector - who was placed perfectly to clear his lines, missed the ball completely with his air kick giving the chance for Kodjia to loft the ball over Rodak in goal for Fulham - before El Ghazi cheekily nicked the goal on the line.
Kodjia's primary concern, however, would be to ensure his side would not be knocked out of the cup at the hands of lower league opposition, as Villa continued to knock on the door and force saves out of Rodak - including a fantastic save from Jota.
Fulham would not back down though, and they got their reward in the 74th minute when substitute Arter's spectacular 25-yard piledriver flew into the top left corner - he had only been on the pitch for two minutes.
Moments later it could have so easily been 3-1 after Onomah won a free-kick, which was played short to the unmarked Stefan Johansen on the edge of the area, but the ball took a bobble before his strike and the Fulham captain launched the ball high into the stand.
In the closing moments of normal time Knockaert was presented with a fantastic chance to put the tie to bed after 17-year-old substitute Jay Stansfield was released out wide before playing a fantastic low cross across the six-yard area but the Frenchman could only divert the ball wide.
Stansfield was very impressive off the bench and continuously gave the Villa defence something to worry about by sitting on the last man and pressing high as Aleksandar Mitrović watched from the stands.
Knockaert again was given a golden chance to wrap up the game in stoppage time, this time cutting in from the left hand side before attempting to chip Ørjan Nyland in the Villa goal - the Norweigan keeper equal to it.
Fulham would hang on for a shock win to progress into the 4th round of the cup but for Villa, it's a disappointing end to their FA Cup campaign already.
Man of the match: Anthony Knockaert
Knockaert was inspirational throughout the game and was justly rewarded with a fantastic goal he will remember forever.
When is the FA Cup 4th Round draw?
The draw for the fourth round of the FA Cup will take place on Monday January 6 at 7:35pm, just before the match between Arsenal and Leeds kicks off.
The draw will be shown on BBC One and BBC One HD as well as BBC iPlayer.