© PA Photos
It was the away side who started the game the stronger, with Martin Paterson putting his effort over the bar from range.
The hosts had a few chances through Guirane N'Daw, who shot wide a couple of times from distance.
Campbell then forced Burnley keeper Lee Grant into making a save as he tipped the striker's effort past the post as the two sides went into the break level.
It was the bottom club who took the lead as Daryl Murphy placed a backwards header past the onrushing Grant from Richie Wellens cross.
The visitors came close to finding a leveller through McCann and Junior Stanislas but both missed the target.
With 10 minutes left, to play Burnley found an equaliser as Stanislas's cross found Sam Vokes, whose header came off Danny Higginbotham before finding its way into the back of the net.
With three minutes of normal time left to play, Carlos Edwards marauded down the right-hand side before crossing for Campbell to score a late winner.
The win moves Ipswich up to 22nd while Burnley fall to 13th in the table.