The 20-year-old recovered from a set down to beat Norway's Casper Ruud 4-6, 6-4, 6-3 and become the youngest player to make the last four in the tournament's history.
Ruud, ranked 24th, saved three match points before double-faulting to hand Jodar victory.
After starting the season ranked 168th, the Spaniard now has a huge chance of qualifying for the ATP Finals in what has been a remarkable breakout year.
He will play either 2019 Shanghai champion Daniil Medvedev or American Tommy Paul in the semi-finals.
Click here for more on the match

It was Jodar's first match since being warned for unsportsmanlike conduct after shouting an expletive at a ball boy in the fourth round.
On Wednesday, Jodar was trailing Botic van de Zandschulp after losing the first set on a tiebreak when he shouted in Spanish: "Give me the f*cking towel!"
Jodar said Friday he knew it was wrong.
"After the match I thought about it and I shouldn't have done that to the ballkid. It was my mistake," he said after his gutsy quarter-final win.
He added that he wished to apologise to the ball boy.
"As I'm learning how to do the forehand, how to do the backhand, how to serve, I'm also learning how to behave on court, and there's still a lot of things," said the world number 13.
"I'm not perfect."
