Craig's big hit broke an 0-for-12 skid.
"It was as good as it gets right there," Cardinals starter Lance Lynn said. "One of the best closers in the National League and to come back and get him like that, that was good for us."
|More on Cardinals-Brewers|
|More MLB coverage|
Milwaukee was leading 2-0 going into the ninth but Axford struggled with his control right away, eventually loading the bases with two outs and yielding a tying two-run single to Matt Holliday.
"You could just tell the attitude in that dugout when we were down two in the ninth, you could just see it wasn't over," Cardinals manager Mike Matheny said. "It is something you can't fake."
Axford (2-6) was lifted after giving up Craig's single, which dropped softly into shallow left field. Axford, who has struggled to find the dominant form he showed last season, left the game to a steady stream of boos from the crowd.
"I don't really listen," Axford said. "I'm in the position where it's kind of a `What have you done for me lately?' I know fans are going to feel the way they feel, we're in a heated race here and we're trying to win some ballgames that we're not winning right now. The fans are going to do what they want to do."
Manager Ron Roenicke said Axford's role might be up for review.
"I think he's got a lot going on upstairs," Roenicke said. "But he still seems to be the same guy. You talk to him before the game or batting practice, he seems to be the same guy. So I don't know what all the issues are."
Axford's sloppy inning wasted another strong performance by Mike Fiers, who pitched seven scoreless innings.
Jason Motte (4-3) got the win. Lynn struck out 10 in seven innings, giving up a run and six hits.
St. Louis had lost three straight after getting swept by Cincinnati in a weekend series.
"We have to hit like we are capable of," Holliday said. "We've got to start playing well and beating the teams in our division and playing better."
Fiers continued his string of strong performances since he was recalled from Triple-A Nashville on May 29. The right-hander was coming off a loss to the Miami Marlins where he gave up two runs in 7 1/3 innings. He is 2-1 with a sparkling 0.76 in his past six games.
Monday's loss was another setback for the Brewers, who announced earlier in the day that ace Zack Greinke will miss his scheduled start Wednesday and isn't scheduled to pitch again until July 24 at Philadelphia.
Roenicke said Greinke was fatigued and thrown off his routine after making three straight starts -- a July 7 game where he was ejected in the first inning, another start the following day and again in the Brewers' first game after the All-Star break.
Greinke said before the game he was "fine" with Roenicke's decision but was reluctant to discuss it. Greinke has been subject to trade speculation in recent weeks, with the Brewers mired in fourth in the NL Central.
The Cardinals had a scoring chance in the fourth when Yadier Molina hit a one-out double and David Freese walked. But Fiers got Matt Carpenter to fly out to center -- allowing Molina to take third base -- then got Daniel Descalso to ground out.
Milwaukee had a chance with two outs in the fifth when a sharp grounder by Cody Ransom glanced off the glove of Freese at third base, allowing Ransom to take second base on a play that was ruled a double. But Descalso charged a soft grounder by Fiers and threw him out, ending the inning.
Francisco Rodriguez relieved Fiers in the eighth and gave up a leadoff single to Holliday, but got out of the inning without giving up a run.
Braun then seemingly gave the Brewers some breathing room, doubling in Norichika Aoki.
- Holliday extended his hitting streak to 15 games.
- Brewers C Jonathan Lucroy is scheduled to begin a rehabilitation stint at Class-A Wisconsin on Thursday. Lucroy has been on the disabled list since May 28 with a broken bone in his right hand.
- The Cardinals purchased the contract of RHP Trevor Rosenthal from Double-A Springfield and transferred LHP Jaime Garcia to the 60-day disabled list.