Kemar Roofe scored twice as League Two Oxford knocked Premier League strugglers Swansea out of the FA Cup.
The in-form hosts recovered from Jefferson Montero's sublime strike to score either side of half-time.
Liam Sercombe levelled from the penalty spot before Roofe curled into the bottom corner from 20 yards.
And Roofe finished off a counter-attack to ensure Oxford reached the fourth round for the first time in 17 years, despite a Bafetimbi Gomis strike.
Swansea's rally came too late and the home side fully deserved their place in the next round following a vibrant performance.
The U's are third in League Two and a number of their young players impressed against a Swansea team that surrendered possession too often and looked shaky at the back in the absence of skipper Ashley Williams.
Michael Appleton's side are already regarded as one of the best teams in their division, and a cup run is likely to further strengthen their promotion push.
Appleton, a former Portsmouth, Blackpool and Blackburn manager, has been promised 50% of the gate receipts generated from the tie for player recruitment.
More than 11,600 supporters packed into the 12,500-capacity Kassam Stadium, guaranteeing a sizeable pay day for the promotion chasers.
Even when under some late pressure, they refused to go long, and in ball-playing John Lundstram, the pacy Roofe and midfield schemer Sercombe they have players who will surely interest clubs from higher divisions.
There was little to cheer for the visitors, who looked to have weathered some early pressure when they took the lead against the run of play from Montero's backheel after a clever one-two with Marvin Emnes.
Alan Curtis' side felt aggrieved at Oxford's leveller - McDonald tumbling without any real contact from Kyle Bartley - but the challenge was reckless and epitomised the muddled nature of some of Swansea's play.
It was desperate stuff - Jonjo Shelvey continually firing long-range shots over the bar - and more slack defending allowed Roofe time to cut inside and bury a fine finish into the bottom corner.
Again, for Oxford's third, the Swansea defence could have done better as the impressive Roofe knocked the ball past Jordi Amat and raced through to finish.
There was a late rally following a Gomis goal laid on by Jack Cork, but the sheer desperation about the Premier League side will be a concern ahead of stiffer tests in the top flight.
Oxford manager Michael Appleton: "I've got to be delighted beating a Premier League side - but not just that, it's the way we did it.
"I think a few people fancied us beforehand and I did too but we also wanted to play the same way we've been doing it all season and play with no fear.
"I've been saying since the start of the season that we've got three or four players who could play at a higher level and Kemar Roofe is one of them.
"But sometimes as a player you want to be at a football club that is also playing to your potential and hopefully they can achieve the success they want here.
"We need more days and nights like this."
Swansea manager Alan Curtis: "We made changes and there was a certain amount of rustiness but I am disappointed. We were poor for the first hour of the game.
"The team we picked was strong enough to win, but all credit to Oxford. They were the better team and deserved to win.
"The league was always going to be the priority but we wanted a cup run and to get some momentum going. It's a huge setback for the club."
Swansea, who made 10 changes, can now focus on Premier League survival, starting with a home game against fellow strugglers Sunderland on Wednesday.
Oxford, who have a four-point cushion in the automatic promotion places in League Two, face Millwall in the first leg of the Football League Trophy area final on Thursday.
Full Time Match ends, Oxford United 3, Swansea City 2.
90:00 +5:05 Full timeFull Time Second Half ends, Oxford United 3, Swansea City 2.
90:00 +4:36Corner, Oxford United. Conceded by Jack Cork.
90:00 +3:58Attempt blocked. Jordi Amat (Swansea City) right footed shot from outside the box is blocked.
90:00 +3:20Corner, Swansea City. Conceded by John Lundstram.
90:00 +0:09Offside, Oxford United. Danny Hylton tries a through ball, but George Baldock is caught offside.
89:04 SubstitutionSubstitution Substitution, Oxford United. Pat Hoban replaces Kemar Roofe.
88:17Offside, Swansea City. Jonjo Shelvey tries a through ball, but Bafétimbi Gomis is caught offside.
87:34Attempt saved. Stephen Kingsley (Swansea City) right footed shot from outside the box is saved in the bottom right corner.
84:42Corner, Swansea City. Conceded by John Mullins.
84:38Attempt blocked. Bafétimbi Gomis (Swansea City) right footed shot from the centre of the box is blocked. Assisted by Modou Barrow.
83:30Corner, Oxford United. Conceded by Kristoffer Nordfeldt.
83:28Attempt saved. Callum O'Dowda (Oxford United) right footed shot from outside the box is saved in the top left corner. Assisted by George Baldock.
82:24Attempt missed. Liam Sercombe (Oxford United) right footed shot from the centre of the box is high and wide to the left. Assisted by George Baldock.
80:49Jack Cork (Swansea City) wins a free kick in the defensive half.
80:49Foul by Callum O'Dowda (Oxford United).
79:43Foul by Jordi Amat (Swansea City).
79:43Chris Maguire (Oxford United) wins a free kick on the right wing.
79:19 SubstitutionSubstitution Substitution, Oxford United. Danny Hylton replaces Ryan Taylor.
78:29Offside, Swansea City. Kristoffer Nordfeldt tries a through ball, but Bafétimbi Gomis is caught offside.
Substitution Substitution, Swansea City. Modou Barrow replaces Matt Grimes.
74:52Attempt saved. Jefferson Montero (Swansea City) left footed shot from the left side of the six yard box is saved in the bottom left corner. Assisted by Jonjo Shelvey.
74:00Corner, Oxford United. Conceded by Stephen Kingsley.
71:50Attempt saved. Matt Grimes (Swansea City) left footed shot from outside the box is saved in the top right corner.
71:02Matt Grimes (Swansea City) wins a free kick in the attacking half.
71:02Foul by Liam Sercombe (Oxford United).
70:18 SubstitutionSubstitution Substitution, Oxford United. Callum O'Dowda replaces Alexander MacDonald.
69:53Jefferson Montero (Swansea City) wins a free kick in the defensive half.
69:53Foul by George Baldock (Oxford United).
67:11Jefferson Montero (Swansea City) wins a free kick on the left wing.
67:11Foul by George Baldock (Oxford United).
65:26 Goal scoredGoal! Goal! Oxford United 3, Swansea City 2. Bafétimbi Gomis (Swansea City) right footed shot from the centre of the box to the bottom right corner. Assisted by Jack Cork.
63:43Offside, Swansea City. Jonjo Shelvey tries a through ball, but Kyle Bartley is caught offside.
62:54Marvin Emnes (Swansea City) wins a free kick in the attacking half.
62:54Foul by John Lundstram (Oxford United).
59:18 SubstitutionSubstitution Substitution, Swansea City. Stephen Kingsley replaces Franck Tabanou.
58:12 Goal scoredGoal! Goal! Oxford United 3, Swansea City 1. Kemar Roofe (Oxford United) right footed shot from the centre of the box to the centre of the goal. Assisted by Chris Maguire following a fast break.
57:37Corner, Swansea City. Conceded by Sam Slocombe.
57:31Attempt saved. Jack Cork (Swansea City) header from the centre of the box is saved in the top right corner. Assisted by Jonjo Shelvey with a cross.
57:09Corner, Swansea City. Conceded by George Baldock.
56:20Jack Cork (Swansea City) wins a free kick in the defensive half.
56:20Foul by John Lundstram (Oxford United).
55:23 BookingBooking Jonjo Shelvey (Swansea City) is shown the yellow card for a bad foul.
55:07Foul by Jonjo Shelvey (Swansea City).
55:07Chris Maguire (Oxford United) wins a free kick in the defensive half.
52:46Attempt missed. Bafétimbi Gomis (Swansea City) right footed shot from outside the box misses to the left. Assisted by Matt Grimes.
51:49Attempt saved. Liam Sercombe (Oxford United) right footed shot from outside the box is saved in the bottom left corner. Assisted by John Lundstram.
51:08 BookingBooking Franck Tabanou (Swansea City) is shown the yellow card for a bad foul.
50:57Foul by Franck Tabanou (Swansea City).
50:57Kemar Roofe (Oxford United) wins a free kick in the defensive half.
50:33Franck Tabanou (Swansea City) wins a free kick on the left wing.
50:33Foul by Alexander MacDonald (Oxford United).
50:26Franck Tabanou (Swansea City) wins a free kick in the defensive half.
50:26Foul by Ryan Taylor (Oxford United).
48:09 Goal scoredGoal! Goal! Oxford United 2, Swansea City 1. Kemar Roofe (Oxford United) right footed shot from outside the box to the bottom right corner. Assisted by Ryan Taylor.
47:28Attempt missed. Chris Maguire (Oxford United) right footed shot from the centre of the box is too high. Assisted by Kemar Roofe.
46:11Corner, Oxford United. Conceded by Franck Tabanou.
45:40 BookingBooking Jordi Amat (Swansea City) is shown the yellow card for a bad foul.
45:19Foul by Jordi Amat (Swansea City).
45:19Ryan Taylor (Oxford United) wins a free kick in the defensive half.
45:00Second Half begins Oxford United 1, Swansea City 1.
45:00 +2:23 Half timeHalf Time First Half ends, Oxford United 1, Swansea City 1.
45:00 +2:11Marvin Emnes (Swansea City) wins a free kick on the right wing.
45:00 +2:11Foul by Chris Maguire (Oxford United).
44:27 Goal scoredGoal! Goal! Oxford United 1, Swansea City 1. Liam Sercombe (Oxford United) converts the penalty with a right footed shot to the centre of the goal.
43:07Penalty conceded by Kyle Bartley (Swansea City) after a foul in the penalty area.
43:07Penalty Oxford United. Alexander MacDonald draws a foul in the penalty area.
43:00Attempt saved. Jake Wright (Oxford United) left footed shot from the centre of the box is saved in the bottom right corner.
42:58Attempt blocked. Liam Sercombe (Oxford United) right footed shot from outside the box is blocked.
42:34Corner, Oxford United. Conceded by Liam Shephard.
41:23Jordi Amat (Swansea City) wins a free kick in the defensive half.
41:23Foul by Kemar Roofe (Oxford United).
38:51 BookingBooking Matt Grimes (Swansea City) is shown the yellow card.
38:47Matt Grimes (Swansea City) has gone down, but that's a dive.
36:49Attempt missed. Jonjo Shelvey (Swansea City) right footed shot from outside the box is close, but misses to the right from a direct free kick.
35:45Bafétimbi Gomis (Swansea City) wins a free kick in the attacking half.
35:45Foul by John Lundstram (Oxford United).
35:02Attempt missed. Jonjo Shelvey (Swansea City) right footed shot from outside the box is too high.
32:17Jack Cork (Swansea City) wins a free kick in the defensive half.
32:17Foul by Chris Maguire (Oxford United).
31:35Attempt missed. John Lundstram (Oxford United) right footed shot from outside the box is too high.
30:27Attempt saved. Chris Maguire (Oxford United) left footed shot from the left side of the box is saved in the bottom left corner. Assisted by Alexander MacDonald with a cross.
28:09Foul by Jack Cork (Swansea City).
28:09Alexander MacDonald (Oxford United) wins a free kick in the attacking half.
24:37Hand ball by Marvin Emnes (Swansea City).
22:42 Goal scoredGoal! Goal! Oxford United 0, Swansea City 1. Jefferson Montero (Swansea City) right footed shot from the centre of the box to the bottom left corner. Assisted by Marvin Emnes with a through ball.
20:46Attempt blocked. Marvin Emnes (Swansea City) left footed shot from outside the box is blocked.
19:20Corner, Oxford United. Conceded by Franck Tabanou.
19:16Attempt blocked. Liam Sercombe (Oxford United) right footed shot from the right side of the box is blocked.
18:45Attempt saved. Kemar Roofe (Oxford United) right footed shot from outside the box is saved in the centre of the goal. Assisted by Joe Skarz.
16:32Corner, Oxford United. Conceded by Kristoffer Nordfeldt.
16:10Corner, Oxford United. Conceded by Kristoffer Nordfeldt.
16:08Attempt saved. Ryan Taylor (Oxford United) header from the centre of the box is saved in the top centre of the goal. Assisted by Chris Maguire with a cross.
10:59Attempt missed. Jonjo Shelvey (Swansea City) right footed shot from outside the box is high and wide to the left. Assisted by Franck Tabanou.
9:07Corner, Swansea City. Conceded by John Mullins.
8:23Attempt missed. Kemar Roofe (Oxford United) header from the centre of the box is high and wide to the right. Assisted by George Baldock with a cross.
7:09Foul by Liam Shephard (Swansea City).
7:09Chris Maguire (Oxford United) wins a free kick on the left wing.
6:30Attempt missed. Jonjo Shelvey (Swansea City) right footed shot from outside the box is high and wide to the right. Assisted by Jefferson Montero.
5:10Attempt missed. Jefferson Montero (Swansea City) right footed shot from the centre of the box is high and wide to the right. Assisted by Marvin Emnes with a cross.
3:31Corner, Oxford United. Conceded by Jordi Amat.
0:37Attempt missed. John Lundstram (Oxford United) right footed shot from outside the box misses to the left. Assisted by Chris Maguire following a set piece situation.
0:15Kemar Roofe (Oxford United) wins a free kick in the attacking half.
0:15Foul by Marvin Emnes (Swansea City).
0:00First Half begins.
0:00Lineups are announced and players are warming up.
Live data and text provided by our data suppliers