Marco Belinelli scored 16 points and DeMar DeRozan had 12 for the Raptors, who avenged a 113-107 loss in Milwaukee on Wednesday night, a game in which Bosh scored a career-high 44.
"We would have taken Bosh getting 40 and having the win again," Milwaukee center Andrew Bogut said.
That didn't happen, even though Luke Ridnour scored a season-high 27 points and Bogut added 22. Milwaukee led by as many as 15 but still lost for the third time in four games.
"There's a lot of games that we have control of and somehow they get away and we end up losing them," Ridnour said. "We've been right there in a lot of road games but the bottom line is a loss is a loss and you've got to find a way to win them."
Toronto has won eight of nine at home and will stay there for seven of its next nine.
"We didn't want to disappoint the crowd tonight," Bosh said. "We kept the effort up, kept fighting, playing good basketball, and pulled one out."
Making his second appearance of the season after signing with the Bucks earlier in the week, Jerry Stackhouse came off the bench to score eight points in 21 minutes.
Raptors center Andrea Bargnani did not play because of a sore lower back and was replaced in the starting lineup by Rasho Nesterovic. It was just the second time this season Bargnani has not played. He also sat out a Dec. 9 loss at Milwaukee with a sore right ankle.
Bosh struggled early in this one but scored eight points in the fourth quarter, helping Toronto overcome a 73-68 deficit after three.
"When you go for 44 I think it takes a little bit out of you," Jack said. "He may have been a little tired, his legs may have been a little gassed but he was playing huge down the stretch for us."
The Bucks scored 57 points in the first half but only 39 in the second, confused by Toronto's 2/3 zone.
"It looked like we didn't know what was going on," Jennings said. "A lot of teams haven't played zone lately. This is the first time a team played zone and actually kept running and running and running it. It was working for them tonight."
The defensive switch also allowed Raptors coach Jay Triano to field a smaller, more agile lineup, surrounding Bosh with Belinelli, Jose Calderon, Jack and Hedo Turkoglu.
"We put Chris out there with four playmakers and he set screens for whoever was closest," Triano said. "Chris rolled, they had to help, and that's what opened up the floor for us."
Milwaukee led 87-81 with 5:00 left before a Bosh dunk, a three-point play by Turkoglu and a driving layup by Jack gave Toronto an 88-87 lead, its first since early in the second quarter, forcing the Bucks to call time out with 3:49 to go.
Neither team scored again until a driving layup by Belinelli with 2:05 left. Two possessions later, Belinelli fed Bosh for a dunk, making it 92-87 with 1:17 remaining.
Jumpers by Ridnour twice cut the lead to three points in the final 20 seconds, but Calderon and Jack each made a pair from the line to seal it.
Turkoglu watched most of the second quarter because of foul trouble and was jeered when he checked into the game in the fourth. He turned the boos into cheers with his pivotal three-point play. He shot 2-for-10 and finished with six points.
Calderon's buzzer-beating halfcourt 3-pointer gave Toronto a 28-25 lead after one but the Raptors went cold to start the second, going 4:39 between field goals as Milwaukee took the lead with a 12-0 run. Toronto fell behind by 15 points before cutting the gap with an 8-0 spurt but trailed 57-48 at the half.
The Raptors reeled off another 8-0 run to start the third, cutting it to 57-56 and forcing the Bucks to call timeout. Milwaukee recovered, outscoring Toronto 12-2 over the next 4½ minutes and pushing its lead back to 11. Toronto chipped away again but the Bucks took a 73-68 lead into the fourth.
Jack scored 13 in the fourth and Ridnour scored 18. ... Toronto is 15-0 when holding opponents below 100 points. ... Milwaukee finished 5-for-26 from 3-point range. ... Calderon was held without an assist for just the 11th time in 323 career games.