Bryan Ruiz struck in the dying seconds to snatch victory for Fulham after Pavel Pogrebynak's equaliser had cancelled out Alex Kacaniklic's opener at Craven Cottage.
Fulham should have been ahead when Ross McCormack cleverly picked out Hugo Rodallega on 10 minutes, but the striker could only fire wide of goal.
Reading would have been ahead if Hal Robson-Kanu had found the target following a good turn in the Fulham box, before Marcus Bettinelli had to be alert to deal with Pogrebnyak's powerful header.
Fulham took the lead 10 minutes after the restart when Scott Parker's superb through-ball found Kacaniklic who calmly placed the ball beyond Adam Federici.
However, the Royals were level just after the hour mark when Pogrebnyak nodded home from Oliver Norwood's corner.
Simon Cox thought he'd won it for the away side but his effort was ruled out for offside, before Ruiz struck in the last second to take all three points for Fulham.
The result sees Fulham climb to 15th, while Reading sink to 18th.