Updated

Adrian Peterson ran for 153 yards and a touchdown on 23 carries behind a strong defensive performance by the Minnesota defense, as the Vikings defeated the Arizona Cardinals, 21-14, at Mall of America Field on Sunday.

John Skelton threw a touchdown pass to Andre Roberts with less than two minutes remaining in the game, but Arizona (4-3) could not recover the onside kick, sealing the victory for Minnesota.

Harrison Smith returned an interception for a touchdown and Minnesota (5-2) registered seven sacks, including three by Brian Robison, to overcome a disappointing performance by Christian Ponder, who threw for just four yards in the second half. He completed 8-of-17 passes for the day with two interceptions, but threw a touchdown in the first half for the Vikings, who will face the Tampa Bay Buccaneers on Thursday night.

Despite a career rushing day from LaRod Stephens-Howling, who ran for 104 yards and a touchdown, the Cardinals struggled to get into an offensive rhythm, converting on third down just 5-of-14 times.

Skelton, who got the start for the injured Kevin Kolb, completed 25-of-36 throws for 262 yards and an interception for Arizona, which lost its third straight game after winning its first four.

"I don't think anyone is packing it in, no one is ready to call it a season," said Skelton. "We're going to get back to our winning ways, starting with San Francisco this week. It will be another dog fight with an NFC West opponent but we just have to be ready for it."

He completed all six of his passes on Arizona's final possession, connecting four times with Roberts, the last for a touchdown to make it 21-14. However, Arizona could not recover the onside kick and Minnesota ran out the remaining game clock.

Following a Jay Feely missed field goal for Arizona at the end of the first half, the Vikings were fortunate to escape with a 14-7 lead, but doubled their advantage early in the third for their final score of the day.

The Cardinals received the ball to start the period, but on the third play of the drive Skelton's pass was intercepted by Smith, who broke several tackles on the play to return it 31 yards for a touchdown. The interception and the score were the first of Smith's career.

Minnesota managed to convert just 1-of-10 times on third down for the game, but the Vikings' defense made important stops to keep the home team ahead.

Arizona made a questionable decision on its next touch. Driving down the field, Skelton's pass to William Powell on 3rd-and-7 fell short of the first down marker, but Arizona decided to go for it on 4th-and-2 from the Minnesota 18. Skelton tried to roll to the outside to pick up the first down, but was stuffed for no gain and the Cardinals came away with nothing with 7:41 to play in the third.

In the fourth, the Cardinals advanced to the Minnesota 32 on a 9-yard pass from Skelton, but after throwing an incompletion on third and being called for a delay of game on fourth, the Cardinals were faced with 4th-and-10. They decided to still go for it, but were denied as Skelton was sacked by Kevin Williams for a turnover on downs.

"That's what we want to pride ourselves on, being the tougest team, the most physical team," said Robison. "We were able to come out today and do that, we just have to keep doing that going forward."

Earlier, the Vikings went three-and-out after an illegal block negated Percy Harvin's touchdown return on the opening kickoff, but Minnesota reached the end zone on its next touch.

Peterson bookended the touchdown drive with two long runs, sprinting for 27 yards on the first play and then scoring on the last with a 13-yard scamper. The Vikings advanced to the Arizona 13 following a 28-yard pass-interference penalty on William Gay before Peterson's touchdown run.

After recovering Powell's fumble on the ensuing kickoff, the Cardinals seemed poised to retaliate. They marched 72 yards down the field on 13 plays, but on 2nd-and-10 from Vikings' 14, Skelton was sacked from behind by Robison, who forced a fumble on the play. Williams of Minnesota dove on it and Arizona came away with nothing.

However, the Cardinals got the ball back quickly, forcing a turnover of their own. On the first play of the second quarter, Ponder's pass intended for Kyle Rudolph was intercepted by Paris Lenon and the Cardinals took over deep inside Vikings territory. Stephens-Howling took three straight handoffs, his last a 3-yard touchdown run to tie the game at seven.

Minnesota answered right back on its next possession. Following back-to-back Peterson runs of 17 and 12 yards to cross midfield, the Vikings converted on two third downs to complete their march. On 3rd-and-4, a defensive holding penalty on Darnell Dockett allowed the Vikings' drive to continue and on 3rd- and-goal, Ponder found Harvin for a 3-yard score to give the Vikings a 14-7 lead.

The Vikings were thrilled to maintain their seven-point lead at the half following a bad interception thrown by Ponder.

From deep in their own territory with 14 seconds left on third down, Ponder took the snap from the shotgun, rolled to his left and lobbed a pass into the hands of Arizona linebacker Sam Acho. It appeared that the ball may have hit the ground on the play, but it was called an interception on the field and the booth confirmed the ruling.

However, the Cardinals could not capitalize on the golden opportunity, as Feely's 47-yard kick was just wide right of the goal post.

Game Notes

The Vikings have won the last three meetings between the two teams and have won the past eight matchups at home ... Peterson rushed for 100-yards for the 29th time in his career, tying Robert Smith for the most in franchise history ... Harvin, who came into the game leading the league in receptions (49), had just four catches for 37 yards on Sunday ... Roberts led all receivers with seven catches for 103 yards ... Arizona will face the NFC West Divsion leading San Francisco 49ers on Monday night, Oct. 29.