Villa were dependent on Brad Guzan to keep the scores level early on as the American keeper made a pair of fine saves, first pulling off a spectacular stop to claw Christopher Samba's goalbound header away, and then repeating it immediately afterwards as the follow-up corner was again met with a shot from the Congolese centre-back.
Villa then suffered a blow as Nathan Baker was injured in a collision with Samba, and his replacement, Joe Bennett, did not get off to the best of starts when he took to the field, giving the ball away to present QPR with a golden chance. Jermaine Jenas teed up Bobby Zamora, but after Guzan kept his shot out, the keeper was helpless to prevent Jenas from following up to put QPR into the lead and leave Villa in trouble.
Villa were rocking, and a Zamora free-kick and Loic Remy long-range effort both came close to doubling the R's advantage as the home side struggled to get into the game. Yet just before half-time, Villa equalised against the run of play -- Jose Bosingwa's free-kick struck the post, and the hosts took the opportunity to launch a counter-attack. As the move slowed down with QPR swarming back, Matthew Lowton launched a hopeful ball forward, which Gabriel Agbonlahor managed to get on the end of and head past Julio Cesar and undo the visitors' work.
Queens Park Rangers replaced Zamora with Junior Hoilett for the second half, although the change did little good as Villa had gotten back into the game and pressure began to mount on the visitors' goal. Bennett almost atoned for his earlier error when providing an excellent cross for Andy Weimann, but the Austrian's header was kept out by Cesar.
Yet in the end, the pressure told, and Weimann broke the deadlock shortly afterwards. Bennett was once again the provider, sliding the striker in as he drilled the ball past Cesar to put Villa into the lead. Now QPR were rocking, and Lowton almost sealed the victory when he fired a fierce effort across goal, but the visitors survived.
Incredibly, another goal completely against the run of play was to follow, as Andros Townsend equalised for the visitors. Park Ji-Sung laid the ball off to the Tottenham loanee on the edge of the area and his deflected effort left Guzan with little chance of saving it, as Villa Park was stunned into silence once again.
The game was becoming a to-and-fro encounter, with every goal seeming to destroy the morale of the opposite side and spur on the scorers, yet all of the goals except Weimann's had come against the run of play - so of course, with QPR swarming all over the Villa backline, it was the hosts who took the lead. Christian Benteke got on the end of Weimann's cutback and was completely unmarked to fire home to give Villa the lead once again.
In typical fashion, the hosts almost immediately surrendered their lead as Remy found himself in an ocean of space in the Villa area less than a minute afterward, but after getting on the end of the cross, he missed a golden opportunity. Nonetheless, the Rs stormed forwards in search of an equaliser, but in the end, time simply ran out and Villa secured one of their biggest wins of the season.