Walsall twice came from behind to beat Doncaster and secure their third away win in a row.
Rovers had a chance to earn a point but James Coppinger missed a last-minute penalty, made even worse when striker Lewis Guy was sent off in injury time.
Doncaster lead in the 17th minute when defender Matt Mills headed home but Walsall drew level through Daniel Fox.
Guy restored Rovers' advantage but goals from Mark Bradley and a Tommy Mooney penalty earned Walsall's win.
Doncaster: Sullivan, O'Connor, Mills, Lockwood, McDaid, Wilson, Stock (Green 63), Wellens, Hayter (Price 75), Guy, Heffernan (Coppinger 46). Subs Not Used: Stephen Roberts, Nelthorpe.
Sent Off: Guy (90).
Booked: Wilson, Sullivan, O'Connor.
Goals: Mills 17, Guy 40.
Walsall: Ince, Wrack (Weston 73), Dann, Gerrard, Fox, Sonko, Bradley, Mattis, Dobson, Demontagnac (McDermott 90), Mooney. Subs Not Used: Hall, Bossu, Deeney.
Booked: Fox, Mooney, Mattis, Sonko.
Goals: Fox 28, Bradley 66, Mooney 71 pen.
Ref: Michael Jones (Cheshire).