Lehlohonolo Majoro had to make do with being on the bench as Victor Obinna started, while Sage Stephens was given the nod in goals for City.
After a quiet start, Brandon Petersen came to Ajax's rescue after 15 minutes as he produced a fine save to stop Roscoe Pietersen from scoring an own goal.
The Urban Warriors went close to taking the lead on 27 minutes as Roderick Kabwe unleashed fine curling free-kick that was tipped over the crossbar by Stephens.
It was the Citizens who broke the deadlock on 34 minutes when Ayanda Patosi's fine pass found Obinna, who controlled well and slotted past Petersen.
The Urban Warriors did have a chance to equalise just before the break, but Pietersen directed his header wide of the upright from six-yards out.
City should have doubled their lead in the 52nd minute when Lyle Lakay's cross found Craig Martin, who headed over from six-yards out.
Stanley Menzo opted for a change just before the hour mark as Masilakhe Pholongo replaced Kabwe as they pushed for an equaliser.
Both sides upped the tempo of the game with 15 minutes remaining in the second half.
Ajax threw on Ndiviwe Mdabuka for Grant Margeman, who was stretchered off while McCarthy introduced Edmilson Dove for Martin.
The Citizens managed to get the second goal in the 89th minute when Judas Moseamedi sprung the offside trap and slotted past Petersen.