David Lough doubled home the lone Kansas City run in the third and the 1-0 lead stood up until two pitches from Royals starter James Shields turned the game around in the late innings.
The Athletics won for just the third time in 10 games.
Both Donaldson and Rosales hit their home runs as the inning's leadoff batter and Oakland managed only four other hits off Shields (2-4).
Sean Doolittle (3-0) worked the eighth inning in relief of Jarrod Parker to get the win. Grant Balfour turned in a 1-2-3 ninth for his seventh save.
Shields struck out nine in the hard-luck loss.