Gardner (left) scored Bolton's second which proved to be the winner
Bolton secured victory thanks to two goals in the first three minutes but also missed a glut of chances.
Matthew Taylor fired the hosts ahead when he flipped the ball up and volleyed in before Ricardo Gardner made it 2-0 with another cracking volley.
Peter Crouch headed in at the far post to hand Pompey a lifeline, but they almost conceded again when Rafn Steinsson's header hit the post.
Kevin Davies had a header cleared off the line as Bolton pressed for a third.
It proved elusive and meant Bolton, who should really have won by a comfortable margin, had to endure an edgy last few minutes.
Having only scored twice in their last five home games, they doubled that tally before Portsmouth had settled.
Megson pleased with 'exceptional' start
In the first minute, Taylor lifted the ball over his marker and hammered his shot past James to open the scoring against his former club.
Botlon pressed again and Johan Elmander's shot was blocked but they did not have to wait long for the second as Taylor headed back across goal and an unmarked Gardner ran onto the ball and smashed it home.
With the visitors looking totally disorganised, Bolton could have wrapped up the points within the first 15 minutes.
But Steinsson's dangerous low cross was not converted, Elmander saw a shot saved by James and Gardner cracked a volley wide.
And then, from nowhere, Pompey got themselves a lifeline when Niko Kranjcar picked out Crouch at the far post and the striker nodded into the net.
Chances followed at both ends, with Elmander shotting over the bar and Kranjcar seeing a low effort tipped around the post by Jussi Jaaskelainen.
Bolton should have restored their two-goal lead when Gardner was clean through, but James saved well with his feet and Hermann Hreidarsson blocked Taylor's follow-up.
Neither Jermain Defoe and Krancjar could control the ball when well placed as Portsmouth looked for an equaliser and just before half-time Bolton were inches away from a third goal when Steinsson saw his header pushed onto the post by James.
The end to end pattern continued after the break as Hreidarsson headed over as Portsmouth pressed and James almost presented Elmander with a gift but managed to save at the striker's feet.
Adams bemoans shambolic start
Pompey remained vulnerable at the back and it took an excellent clearance off the line by Kranjcar to stop Davies's header making it 3-1.
Davies was involved again soon after when he nodded down for Kevin Nolan, who nipped in ahead of James but prodded the ball wide.
Bolton's profligacy continued when Gardner curled wide after the ball had come back to him after James nicked the ball off Elmander's toes.
Pompey then brought on substitute Lassana Diarra in an effort to salvage something from the game, despite the midfielder's impending £20m move to Real Madrid.
It had the effect of shoring things up for the visitors, but they were left to rue their miserable start to the game as they ran out of ideas up front in the closing stages.
Bolton manager Gary Megson: "We had a fantastic first 15 minutes and got into a great lead - we had opportunities to increase that lead but we didn't take them.
"Maybe we lost that intensity and then we conceded. We had a lot of chances but we didn't manage to convert them.
"But I don't think we were hanging on at any point."
Portsmouth boss Tony Adams: "We were awful for the first 10-15 minutes - we lost every one-versus-one battle.
"It was a very direct game, they put pressure on and won second balls and set plays and we did not handle it. It was a good reaction after that, but the game was over after the first five minutes.
"I lost my voice in the process of driving the lads on after the shambles of the start. I don't know why, but the boys were not up for the fight at all. That was disappointing.
"I don't think we deserved an equaliser. There are certain fundamentals you have to do to win matches. You have to compete, you have to earn the right but we got rolled over in the first 15 minutes."
Bolton: Jaaskelainen, Steinsson, Cahill, Andrew O'Brien,
Samuel, Davies, Nolan, McCann, Taylor, Gardner (Muamba 83),
Subs Not Used: Al Habsi, Smolarek, Riga, Shittu, Basham,
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.