An own goal by Leicester goalkeeper Kasper Schmeichel gave Doncaster only a third league win of the season.
The Dane fumbled Mark Duffy's 17th-minute corner into his own net to condemn Leicester to a second defeat of the campaign and leave City three points off the Championship's top two.
Jamie Vardy hit the post for the visitors, while Anthony Knockaert went close from distance.
Chris Brown fired over late on for Rovers, who moved 16th in the table.
Schmeichel's error gave promoted Doncaster only their second home win of the season and takes Paul Dickov's side six points above the relegation zone.
Leicester were chasing a third successive win for the first time since January and Nigel Pearson's side were beginning to settle when Schmeichel conspired to hand Doncaster the initiative.
Schmeichel was unchallenged as he moved to collect Duffy's delivery but dropped the ball into his own net.
On-loan Manchester United striker Federico Macheda almost doubled Rovers' advantage but was denied by a smart save from Wes Morgan.
Leicester defender Paul Konchesky saw a low 20-yard shot well held by Ross Turnbull late in the first half, before Vardy pulled down a cross to fire against the upright.
The pressure on the home side intensified after the re-start but resolute defending limited the Foxes to long-range efforts.
Knockaert fired a free-kick over from distance as the home side saw out the closing half an hour to complete victory.
Doncaster Rovers's manager Paul Dickov:
"We came up against a top team and competed very well with and without the ball.
"It takes a lot of courage to have a go against teams like that but we've done it and been rewarded.
"I didn't actually see the goal when the ball went in but I think we were due one after not getting our just desserts with some of our recent performances."
Leicester City manager Nigel Pearson:
"In a nutshell, the game's been settled by one incident really, but we've not created enough chances in open play to get back in it in the end.
"No doubt people will dwell on the goal but there will probably be more talk about it outside our dressing room than inside.
"Kasper's been exceptionally good since he came to the club and been responsible for winning matches and picking up lots of points with his performances."
Doncaster Rovers 01 Turnbull 05 Jones 14 Khumalo 02 Quinn 32 Wabara 18 Keegan 04 Furman 07 Duffy 10 Macheda (Coppinger - 75' ) 09 Brown 22 Robinson Substitutes 26 Coppinger 23 Bennett 08 Paynter 12 McCullough 11 Cotterill 19 Wellens 13 Maxted Leicester City 01 Schmeichel 18 Moore 02 de Laet (Wasilewski - 68' ) 05 Morgan 03 Konchesky 24 Knockaert 04 Drinkwater 11 Dyer (Schlupp - 71' ) 10 King 35 Nugent Booked 09 Vardy Substitutes 25 Logan 23 Miquel 20 Hopper 27 Wasilewski 07 Hammond 08 James 15 Schlupp
Ref: Mark Heywood