由于组织不当,一切军政事务皆由王振专断。户部尚书王佐请朱祁镇回京,王振就命其跪在草丛里,直到天黑才能起来。随征的文武大臣不能参与军政事务,军内自相惊乱。明军刚到达大同,接获镇守太监郭敬的密报,也先为诱明军深入,主动北撤。王振看到瓦剌军北撤,仍坚持北进,后闻前方惨败,惊慌撤退。王振本欲使朱祁镇于退兵之时,经过其家乡蔚州“驾幸其第”,以显威风。又怕大军损坏他的田园庄稼,故行军路线屡变,导致士兵疲惫不堪。瓦剌大队追兵追袭而来,明军三万骑兵被“杀掠殆尽”。余下部队移师于土木堡被瓦剌袭击,明军战败投降,伤亡过半,皇帝朱祁镇被俘,兵部尚书邝埜、户部尚书王佐等大臣战死。
一夜之间爆发了土木堡之变,皇帝朱祁镇被俘,瓦剌咄咄逼人。一时间,朝野震惊,全国哗然,特别是京师,到了人人自危的地步。
面对危机局面,大明朝堂之上围绕是“战”还是“迁”展开了纷争。正统十四年(公元1449年)八月十八日,由孙太后压阵,监国的郕王朱祁钰主持召开御前会议,商讨对策。翰林院侍讲徐珵根据天象的变化,首先提出迁都南京,以避刀兵。南迁之议,颇得一些大臣支持。于谦当即否定了这项提议,他认为皇陵、宗庙、社稷都在京师,不可轻易迁移,且要以宋朝为教训,指责南迁是亡国之论。
正统年间,皇帝朱祁镇宠信宦官王振,大臣凡是有不利于王振者,非死即贬。如今朱祁镇被俘,王振被杀,众大臣纷纷吐气扬眉,甚至跪在午门外,要求监国的郕王朱祁钰惩处王振余党。这时,王振的党羽锦衣卫指挥使马顺出来阻挡,当即被愤怒的群臣打死,王振的外甥王山作为王振的同党,也被当庭打死。郕王朱祁钰看到眼前的惨状,有些害怕,欲回宫去,但于谦却拉住他的衣袖,说王振罪当诛九族,马顺等人罪孽当死,打死他们的群臣应不予追究。朱祁钰下令马顺等人罪有应得,而众臣则无罪。
俘虏了朱祁镇,瓦剌太师也先又忧又喜,喜的是连大明的皇帝都抓住了,忧的是不知道该杀还是该留。倒是他的弟弟伯颜帖木儿提议,大明的皇帝奇货可居,不如留下他,好向明朝廷索要财物。也先觉得这个提议甚好,便留下朱祁镇一命。
也先想借被俘的皇帝朱祁镇敲诈勒索明朝廷,明朝廷中以于谦为首的大臣们建议孙太后,国不可一日无君,更何况在此危难之时。正统十四年(公元1449年)八月二十八日,王文上书朱祁钰,希望他以江山社稷为重,承继大统。当时的皇太子朱见深年仅两岁,为免主少国疑,于谦等大臣禀明孙太后,最终在同年九月拥立朱祁钰为帝,改元景泰,遥尊朱祁镇为太上皇。景泰皇帝朱祁钰下令边关将领,不得私自与瓦剌接触,即便是瓦剌用太上皇朱祁镇的名义,也不用搭理。同时展开大规模的清算行动,诸多的王振党羽纷纷落马。
也先恼羞成怒,挥师攻打京师。朱祁钰任用于谦等人组织京师保卫战,整肃内部,调集重兵,安定人心。最终在同年十一月击退瓦剌,取得京师保卫战的胜利。瓦剌无奈之下,退走大漠。
景泰元年(公元1450)八月,距离太上皇朱祁镇被俘,将近一年。瓦剌无法从他身上得到好处,又多次被明军打败,只好派人南下求和,表示愿意放朱祁镇回去。瓦剌倒是愿意放人,可是恋栈皇位的景泰皇帝朱祁钰却不乐意了。
朱祁钰派了杨善等人前往查探,谁知杨善乘机迎驾,将太上皇朱祁镇接了回来。羁留塞北一年之后,朱祁镇踏上了回乡之路。八月初二,朱祁镇从也先的驻地出发,十四日抵达居庸关。十五日,一轿两骑,悄然进入安定门。北狩一年的太上皇朱祁镇,终于回来了。
然而,一回到京师的太上皇朱祁镇,便被他的弟弟朱祁钰软禁在了南宫。