Tim Anderson tripled and had two RBIs. Charlie Tilson singled in a run off reliever Mike Mayers in Chicago's two-run seventh and Jose Abreu added an RBI groundout as White Sox ended a six-game losing streak and won for just the third time in their last 13.
Rodon (2-3) allowed only two singles and a double while walking two and striking out a season-high seven though 7 1/3 innings. The 25-year-old left-hander, who spent the first two months of 2018 on the disabled list rehabbing from shoulder surgery, sparkled in just his seventh start this season.
Joakim Soria got the final four outs for his 13th save in 16 chances.
Weaver (5-8) allowed one run on three hits and fanned seven his second straight impressive start. The right-hander pitched two-hit ball over a career-high eight innings last week in San Francisco.
Jose Martinez grounded a sharp single off Rodon with two outs in the first. Then the White Sox lefty didn't allow another hit - and retired 14 of 15 batters - before Matt Carpenter doubled with one out in the sixth.
Rodon was coming off his strongest outing this season, when he allowed two runs on five hits in a six-inning no-decision at Houston last week.
The White Sox managed only three baserunners - with Yolmer Sanchez singling twice - before the fifth, when Chicago took a 1-0 lead.
Leury Garcia walked to lead off, advanced to third on Omar Narvaez's single and came home when Anderson grounded into a force at second.
The White Sox scored twice with two outs in the seventh to make it 3-0. Narvaez singled, then scored on Anderson's triple to the left field corner. Tilson's single plated Anderson.
The Cardinals loaded the bases with one out in the eighth to chase Rodon. Paul DeJong led off with a single, Kolten Wong reached on an error and Carpenter walked.
But Juan Minaya fanned Tommy Pham for the second out, then Soria struck out Martinez to end the threat.
The White Sox added a run in the eighth when Yoan Moncada came home on Abreu's groundout.
Cardinals right-hander Miles Mikolas was removed from the National League's active roster for the All-Star Game next Tuesday because he's scheduled to start Sunday against Cincinnati. Los Angeles Dodgers righty Ross Stripling was added to the NL pitching staff Wednesday as Mikolas' replacement.
Mikolas is 10-3 with a 2.65 ERA and was selected to his first All-Star team last weekend. The 29-year-old is enjoying a resurgent season in the majors after three years in Japan.
The White Sox designated RHP Bruce Rondon for assignment and purchased the contract of RHP Jeanmar Gomez from Triple-A Charlotte before the game The 27-year-old Rondon went 2-3 with an 8.49 ERA and one save in 35 games. The reliever got one out and issued three walks in Tuesday night's 14-2 loss to St. Louis.
Cardinals: CF Tommy Pham (bruised left ankle) was back in the lineup after being a last-minute scratch on Tuesday and struck out four times. Pham fouled a ball off his foot on Sunday. . Manager Mike Matheny said LHP Tyler Lyons (sprained left elbow) is close to returning from his rehab assignment. . RHP Luke Gregerson (right shoulder impingement) could be activated this weekend, but Matheny didn't have a date.
White Sox: RHP Nate Jones (right forearm muscle strain) tossed live batting practice on Wednesday. Jones said he felt good and threw at ''90-100 percent,'' but the next steps in the right-hander's recovery haven't been determined . RHP Miguel Gonzales underwent right shoulder surgery in Los Angeles on Wednesday. His recovery time is expected to be nine to 12 months.
Cardinals: RHP Carlos Martinez (6-4, 3.05) looks for his fourth straight win when he takes the mound against Cincinnati's Matt Harvey (4-5, 4.80) on Friday in the opener of a three-game home series.
White Sox: RHP James Shields (3-10, 4.53) squares off against Kansas City RHP Brad Kelley (2-3, 2.52) on Friday in Chicago.
More AP baseball: https://apnews.com/tag/MLBbaseball