Inizia la carriera da calciatore nel 2000, quando viene acquistato dallo Zob Ahan, in cui compie tutta la trafila delle giovanili fino al 2006, anno in cui si trasferisce al Sepahan. Nello stesso anno debutta in prima squadra, mentre il 18 settembre 2008 realizza la sua prima rete in carriera.[1]
Cinque stagioni più tardi viene ceduto in prestito al Tractor Sazi, dove esordisce il 2 agosto 2011 in occasione del match di campionato contro il Saba Qom.[2]
Dopo due stagioni in prestito, nel 2013 torna al Sepahan.
Nel 2015 si trasferisce in Germania, all'FSV Francoforte;[3] con la squadra disputa una buona stagione, condita anche da 2 gol (di cui uno da 45 metri contro il Friburgo),[4][5] ma non basta per evitare la retrocessione in terza serie tedesca.
A tal punto Hajsafi non rinnova il suo contratto con il club di Francoforte sul Meno tornando a giocare nel Sepahan.
Dopo un anno, torna a giocare in Europa, questa volta in Grecia, nel Paniōnios, raggiungendo il connazionale Masoud Shojaei, anch'egli militante nel club greco.[6] Nel terzo turno preliminare di Europa League il Paniōnios incontra il Maccabi Tel Aviv, squadra israeliana, e sorgono problemi per i due calciatori iraniani in quanto l'Iran non riconosce lo stato d'Israele; dopo essersi rifiutati di giocare la gara d'andata a Tel Aviv, i due sono stati obbligati a giocare la gara di ritorno. Prima dell'inizio della partita Hajsafi e Shojaei stringono la mano ai giocatori della squadra avversaria, gesto che non passa inosservato al governo iraniano. I due vengono così sospesi dalla nazionale.[7] Al contrario di Shojaei, che sarà richiamato in nazionale solo nel marzo 2018, Hajsafi viene convocato nuovamente in nazionale, avendo inviato un messaggio di scuse.[8]
Il 2 gennaio 2018 lascia, dopo soli sei mesi, il Paniōnios per accasarsi all'Olympiacos.[9] e otto mesi dopo torna al Tractor. Il 13 marzo 2021 passa al Sepahan, dove rimane per il resto della stagione sportiva.
Il 25 maggio 2008 esordisce con la nazionale maggiore nell'amichevole vinta per 3-2 contro lo Zambia; nella stessa partita è partito titolare, consegnando 2 assist.
Ha partecipato a 2 Coppe d'Asia (2011, 2015) e 2 Mondiali (2014,[10] 2018),[11] giocando sempre titolare, e segnando anche il gol del provvisorio 1-0 nella sfida vinta per 2-0 al primo turno contro il Bahrein durante la Coppa d'Asia 2015.[12]