Djokovic was down a set and 4-4 against former finalist Ivan Ljubicic, who had 14 aces. But Djokovic won the next eight games and will play Marcos Baghdatis.
"After losing the first set comfortably, I tried to hold my serve," Djokovic said. "I knew that at a certain point he's going to miss (a) couple of first serves, and that was my chance. "
The unseeded Baghdatis defeated Michael Berrer 7-6 (5), 6-1. He had 11 aces and gave Berrer no break chances.
Jurgen Melzer overcame Marin Cilic 7-6 (8), 7-5 to reach the other semifinal. Melzer will face seventh-seeded Mikhail Youzhny, who defeated Janko Tipsarevic 6-3, 6-4.
Cilic looked in control with a 4-1 lead in the second set but Melzer held serve and Cilic started making errors on a windy afternoon.
It marked the first time this year that Cilic did not reach the semifinals. He won titles in Chennai and Zagreb — including a win over Melzer in the semis. He also made it to his first Grand Slam semifinals at the Australian Open.
"Of course, it's a little bit disappointing. I think that I could go a little bit further," the sixth-seeded Cilic said. "I had my chance to make something and to win a few more matches. But also, the other guy played well. Melzer deserved it."
Melzer advanced to his second semifinal of the year.
"Well, to be honest, I think I was a little lucky to hold serve at 4-1," he said. "He played really fantastic from when he just started the match. But after that I mixed it up a little bit, played a little serve-and-volley and served better."
Tipsarevic, a day after upsetting Andy Murray, was never in contention against Youzhny. He was 0-for-3 in break-chance opportunities.
"I knew he would be a little tired after last night's tough match against Murray, so I just wanted to make him run a bit," Youzhny said. "The plan seems to have worked."