Kyle Korver scored all 14 of his points in the fourth quarter, going 3-for-3 on field goals, including a 3-pointer, and making all seven of his free throws.
Deron Williams had 25 points and 15 assists and Mehmet Okur had 25 points, including 4-of-6 3-pointers, and grabbed 14 rebounds to give the Jazz their fourth win in a row and just their 14th in 33 games on the road this season.
"We played pretty well," usually hard-to-please Jazz coach Jerry Sloan said. "We got the ball where we wanted to go with it. Deron was terrific getting us where we wanted to go."
Amare Stoudemire scored 37, O'Neal had 20 points -- his highest-scoring game with Phoenix -- and Steve Nash added 17 points and 15 assists.
Raja Bell added 19 points. Phoenix is 8-0 when he scores at least 20.
The Jazz, who shot 57 percent, outscored Phoenix 12-4 over the frantic final 2:09.
"They're coming in here and getting whatever they want, and we can't allow that," Stoudemire said of Suns foes. "We've got to man-up. We've got to dig inside our chests and find that heart that's in there beating."
Andrei Kirilenko missed his second game in a row for Utah with a right hip strain but the Jazz offense certainly didn't suffer. Utah shot 75 percent (12-of-16) in the decisive fourth quarter to Phoenix's 37.5 percent (9-for-24).
"We've just somehow got to find a way to defend a little bit better," Suns coach Mike D'Antoni said. "I think our offense is coming along. ... Shaq is playing well. All the things we did for the trade are happening, but we haven't been able to stop people."
Williams started and ended a 9-0 run with jumpers, his last an 11-footer to give Utah its first lead since the early minutes, 80-79 with 5:56 left in the third.
Nash responded with a 3, Bell added his fifth 3 of the game, Stoudemire made a three-point play and Phoenix went on a 15-3 run to go up 94-83 on Bell's two free throws with 39.9 seconds to play in the quarter.
Paul Millsap's basket cut it to 94-85 entering the fourth and ignited a 12-2 outburst that put Utah ahead 97-96 on Williams' driving layup with 8:42 to play. Stoudemire, Nash and Bell were on the bench during the surge.
There were seven lead changes and four ties before the Jazz went ahead 118-114 on four consecutive free throws, two by Korver with 2:09 to play and two by Boozer with 1:18 to go. Stoudemire's three-point play cut it to 118-117, but Williams made a 12-footer to boost the lead to 120-117.
"We did a good job of pushing the tempo a little bit," Boozer said, "trying to make the referees make calls on them so we can go to the free-throw line a little bit more. We were more aggressive I thought in the second half."
O'Neal made one of two free throws to cut it to 120-118 with 55.5 seconds to play, but Boozer's pretty shot made it a four-point lead and Suns couldn't recover.
The Jazz shot 56 percent in the first half and still trailed 66-59 at the break. That's because Phoenix shot 57 percent, including three 3-pointers in the final 1:24, two by Bell and one by Nash.
"I think it's going to take them a little bit of time to adjust," Williams said of the Suns. "With Shaq you can't run as much as you can with Shawn Marion in there. It's a different ballgame. I think they've got to judge when to run and when to slow it down. It could be a little tough for them."
Asked if saw a ray of hope in what was, in many ways, an improved Suns performance, Bell said, "I'm not a ray of hope kind of guy."
"We're in a battle now for playoff life," he said. "I thought we played hard, but the end result was a loss, and those are mounting right now."
Stoudemire has led the Suns in scoring for a career-high 13 straight games and scored at least 20 in a career-best 15 straight. ... There were 59 fouls called in the contest. ... Utah is home against Denver Saturday night before beginning a four-game eastern road trip. ... Phoenix is home against San Antonio on Sunday.