Two first-half goals from Lewis Emanuel enabled Bradford to extend their unbeaten run to five matches.
Emanuel scored his first when he picked up Marc Bridge-Wilkinson's pass and hit a 25-yard shot past Alan Blayney.
He doubled the Bantams' lead when Danny Cadamarteri sent him clear and he smashed home another left-footed shot.
Doncaster pulled a goal back after 67 minutes with a superbly-struck 25-yard free-kick from Ross McCormack to set up a tense finish.
Bradford: Ricketts, Swift, Wetherall, Stewart, Bower, Muirhead (Colbeck 79), Bridge-Wilkinson, Bentham, Emanuel, Windass, Cadamarteri (Brown 79).
Subs Not Used: Howarth, Kearney, Schumacher.
Booked: Muirhead, Bridge-Wilkinson, Cadamarteri, Stewart.
Goals: Emanuel 20, 27.
Doncaster: Blayney, Albrighton, Stephen Roberts (Marples 45), Lee, McDaid, Coppinger (Guy 64), Thornton, Horlock, McCormack, Ravenhill (Green 84), Armstrong.
Subs Not Used: Budtz, Fortune-West.
Booked: Ravenhill, Guy.
Goals: McCormack 68.
Ref: L Mason (Lancashire).