Alex Hales hit 99 as England went 2-0 up in the five-match ODI series with a five-wicket victory at Port Elizabeth.
AB de Villiers top-scored for South Africa with 73 off 91 balls as they posted 262-7 on a slow pitch, England left-armer Reece Topley claiming 4-50.
Hales then struck a second successive fifty, becoming the first batsman out for 99 in both ODI and T20 matches.
And Jos Buttler followed his century in the first match with an unbeaten 48 as England won with 22 balls left.
The St George’s Park surface was not as conducive to shot-making as the Bloemfontein track on which England hit 15 sixes and amassed 399 in that first match on Wednesday.
They lost three wickets inside seven overs but Buttler was coolness personified, hitting three successive sixes in a devastating 28-ball cameo as England scored the final 29 runs in just eight balls to take a strong advantage into the third match in Centurion on Tuesday.
Buttler does it again
England lost Jason Roy in the third over and it prompted Joe Root and Hales to curb their natural attacking instincts.
Their calm second-wicket partnership of 97 in just under 23 overs contained only six boundaries but kept England in touch at 111-1 after 25 overs compared to South Africa’s 114-3 at the same stage.
When Root played on to his stumps for 38 in the 26th over, England skipper Eoin Morgan brought himself in at number four, deciding his busy style of play against the spinners would be better suited to the slow, low pitch than Buttler’s daring brand of strokeplay.
With 94 needed from as many deliveries, Morgan hoisted Morne Morkel towards long-on and De Villiers took a perfectly judged catch.
Ben Stokes also came in ahead of Buttler and successfully overturned an lbw dismissal third ball from Imran Tahir as replays showed the ball pitched outside leg-stump, the third unfortunate decision from South African official Johan Cloete.
But the left-hander had still to score when he got an inside edge on to his stumps off Morkel in the next over.
The stage was set for Buttler, at number six instead of number four as he was in the first match, with 87 needed from 80 balls.
Man-of-the-match Hales, who made only 136 runs in eight innings in the Test series, looked certain to record his second ODI century but his composed 124-ball innings ended in the 42nd over when the ball brushed his bat in his follow-through and glanced to the wicketkeeper.
However Buttler, who earlier in the day was bought for what now seems a bargain £385,000 by Mumbai Indians in the Indian Premier League (IPL) auction, bided his time before hitting three successive boundaries off paceman Kyle Abbott.
Demonstrating more clinical hitting, he then dispatched spinner Tahir into the leg-side and down the ground for three massive maximums to take England within eight of a victory that Moeen Ali ensured with successive fours off Morkel.
Catches win matches
Although the South Africans were not exactly plundering the runs, De Villiers had just hit his first six with an imperious front-foot pull off Chris Jordan and was building for a final charge inside the last 10 overs with his team 205-3.
When he launched Stokes deep into the leg-side he must have been hopeful that the swirling breeze and the bright sunshine might have made things difficult for the fielders.
Jordan clutches his spectacular catch to dismiss dangerman De Villiers in the 41st over
But Jordan gave another example of his outstanding catching ability, running back to clutch the ball over his shoulder, his 18th catch in 26 ODIs.
JP Duminy departed three balls later lbw but although replays would show the ball was missing the stumps, he could not ask for a review because that had been spurned by Quinton de Kock, who also wasted the South Africa fielding review when he persuaded De Villiers to check a caught behind appeal against Hales that showed not a trace of contact with the bat.
Only four more boundaries followed in the remainder of the innings, unlike the six fours and five sixes England added from the final 10 at Bloemfontein in the opening match.
Jordan may have gone for 33 in his six overs with the ball but his superb catch saved a potentially decisive number of runs.
What they said
England captain Morgan: “The challenge today was adapting to the different conditions and that’s what pleased me the most.
“We’ve not played on a surface like this for a long time, so it was top-class.”
South Africa skipper De Villiers: “I felt we were about 20 short, 290-300 would have been ideal.
“Credit to the opposition, they out-thought us at times. Jos Buttler played an exceptional knock but they managed the innings really well early on with Alex Hales and Joe Root, and they set it up for a guy like Jos to finish it.
“Hopefully we’ll get it to 2-2 on the Highveld and get it back to Cape Town for a decider.”
TMS pundit reaction
Vic Marks: “Buttler is a remarkable cricketer, it’s not just his power – it’s the way he responds to these tight situations, finishing games as if it’s a walk in the park.”
Geoffrey Boycott: “Until the last 15 minutes, you’d have thought it could go either way.
“That catch from Chris Jordan was everything. I wouldn’t have caught that in 10 attempts but I always thought Jordan would catch it – that was the turning point.”