Both sides were reduced to 10 men as Connor Roberts and Patrick Schick saw red in separate second-half incidents.
Schick was dismissed after tangling with Roberts three minutes after the restart, an incident which saw the Swansea wing-back booked.
Roberts collected his second caution 13 minutes from time after catching Tomas Soucek in the face during an aerial challenge, which the West Ham midfielder ensured caught the attention of Romanian referee Ovidiu Hategan.
Wales quickly recovered from that setback as Gareth Bale crossed from the left after 81 minutes, and James' downward header beat the despairing dive of Czech goalkeeper Tomas Vaclik for his fourth international goal.
The Czech Republic - 24 places lower than Wales on the FIFA world rankings at 42 - already had four points on the board after winning 6-2 in Estonia and drawing 1-1 at home to Belgium on Saturday.
The win is crucial for Wales’ national team, who lost their first World Cup qualifying match 3-1 away at Belgium despite taking the lead initially.
Wales forward Gareth Bale told Sky Sports after the match: "It was a massive result, we didn't get off to the best start against Belgium so it was massively important to get the win tonight.
"We showed a lot of heart and desire to match a very physical team.
"It was very chaotic, especially second half, but we were ready and kept going until the end and most important thing is to get that winner.
"We need to win games to qualify and we want to win every game, football doesn't always go the way you expect it to.
“The win is just what we needed. We were focused and we stuck to our gameplan and got the win.”