"It's a good thing to be disappointed when you're 5-2," he began. "Obviously the offense, especially me, didn't perform as we should have." Winning will ease the pain, but consider the following: The Vikings were outgained 356 yards to 209. Besides two long first-half scoring drives, the Vikings netted 49 yards. And then there was Ponder. He completed eight of 17 passes for just 58 yards. He threw two interceptions for the third straight week. He led a Minnesota offense that gained a total of 58 yards and managed two first downs in the second half. But it was enough. That's because Vikings running back Adrian Peterson had his 29th career 100-yard gain, gaining 153 yards on 23 carries with his first touchdown since opening day. Percy Harvin caught four more passes, including one for a touchdown. But, the credit for this one mainly goes to the defense. The Vikings sacked Arizona quarterback John Skelton seven times, and rookie safety Harrison Smith returned his first interception 31 yards for a touchdown early in the second half and give the Vikings a 21-7 lead. "We just had too many mistakes," Arizona coach Ken Whisenhunt said. "Turnover to start the second half was tough. Offensively we did some good things, but we've got to quit making mistakes." Arizona's offense was just as shaky as Minnesota's. Skelton made Ponder pay for his first interception by leading a short drive that ended with LaRod Stephens-Howling's three-yard TD run. But Skelton was on his back or off the mark for most of the game. Even Stephens-Howling's 149 total yards from scrimmage wasn't enough offset that. Defensive ends Brian Robison (three) and Jared Allen (two) each had multiple sacks of Skelton, who was starting in place of the injured Kevin Kolb. "We knew we were going to have to outplay their defense," Robison said. "They have a great defense over there. We had to get after their quarterback, not let him sit there and make plays. We wish we would have tackled better on the run, but bottom line is we got a win." Indeed. The 5-2 Vikings are set to host Tampa Bay Thursday for a chance to finish the first half of the season with six wins. After starting the season 4-0, the Cardinals have now lost three straight overall and have lost their last eight games played at the Metrodome. "It was one thing - the inability to capitalize on opportunities - that is extremely frustrating," Cardinals receiver Larry Fitzgerald said. The Vikings offense moved the ball early, using 12 plays to take a 7-0 lead on Peterson's 13-yard run. After the Cardinals turned Ponder's first pick into a TD to tie the score, the Vikings moved 69 yards in 10 plays to score on Ponder's three-yard TD pass to Harvin. That was pretty much it for the Vikings offense, which had three-and-outs on four of six second-half possessions. Smith made it 21-7 early in the third when he stepped in front of Skelton's pass intended for Early Doucet and returned it for a score. After that, neither offense could execute. In all, Arizona had five drives of six plays or longer but could not close the deal, losing the ball twice on downs, once by fumble and once by interception. The bottom line was a victory for Minnesota. "It's hard to get wins in the National Football League," Vikings coach Leslie Frazier said. "That was a tough team we played today, one that I'm sure this December will be battling for a spot in the playoffs. There were things we didn't do well. We could have done a lot better and we'll try to make those corrections.'' NOTES: Rashad Johnson started ahead of Kerry Rhodes at free safety for the Cardinals. The other lineup change was Reagan Maui'a starting at fullback in place of the injured Anthony Sherman. ... As expected, Vikings receiver Jerome Simpson - who was inactive last week with problems the team said were related to his back - was active. ... Peterson's 29th 100 yard game tied him with Robert Smith for most in franchise history. ... Jared Allen had his first multiple-sack game since Week 17 of the 2011 season.