An 82nd-minute goal from on-loan striker Dave Kitson put Reading back on the winning trail and revived their hopes of automatic promotion.
Reading had only won once in their previous eight games but edged the match and just about deserved their victory.
But Kitson was fortunate to be on the field to score the match-winner after a foul in the 61st minute, which led to Rovers star James Coppinger being stretchered off.
Referee Paul Taylor awarded a free-kick, but took no action against the Reading player.
Reading enjoyed more possession and pressure in the first half with Kitson always a threat and he had a header saved after latching on to Kevin Doyle's right-wing cross in the ninth minute.
Doncaster were patchy in their approach but it needed a timely interception from Andre Bikey in the 15th minute to whip the ball off Paul Heffernan's toes, following a cross by Coppinger.
Heffernan had a shot blocked five minutes later after more good work by Coppinger but just failed to connect with a cross from John Spicer, which only needed a touch to send it goalwards in the 35th minute.
Doncaster improved in the second half although neither keeper was seriously tested.
James Harper had a first-time shot blocked by Matt Mills in the 56th minute and Dean Shiels looked dangerous at the other end after coming on for Coppinger in the 61st minute.
Shiels was involved with Spicer to set up the best chance so far in the 70th minute when Brian Stock latched on to the final pass but drove a low shot inches wide of the mark.
Spicer fired wide in the 81st minute and the game looked to heading towards a goalless draw until Kitson struck a minute later.
Chris Armstrong played a short pass to his feet just outside the box and he hit a curling left-foot shot into the top corner.
Rovers tried to rally with Heffernan having a downward header saved in the 86th minute before causing Marcus Hahnemann to save bravely at his feet again in the last minute.
But the visitors hung on to take three hard-earned points.