正統十四年(1449年)七月,蒙古瓦剌部太師也先以明朝拒絕互市為由,率領征發蒙古各部騎兵是十余萬,兵分四路,大舉攻打明朝北部邊關。也先的部署為:東路,由脫脫不花與兀良哈攻擊遼東;西路派別將進攻甘州(今甘肅張掖)以牽制明軍;也先與阿敕知院分率瓦剌精銳攻打宣府和大同。其中也先所部2萬瓦剌騎兵是四路大軍中最能打也是最精銳的主力。
七月十一日,也先在大同附近的貓兒莊(今山西陽高縣北一帶)大破明軍,斬殺明大同右參將吳浩。七月十五日,明大同總督宋瑛、駙馬都尉井源、總兵官朱冕、左參將都督石亨合兵4萬,在陽和(今山西陽高西北)與也先會戰,明軍再敗,宋瑛、朱冕陣亡。貓兒莊和陽和的失利,導致明軍士氣大跌,除大同、宣府等堅城外,明軍在長城沿線的據點皆被瓦剌攻陷。史載:「塞外城堡,接連失陷」。
當明軍一系列敗報傳到北京,年輕的朱祈鎮(明英宗)在司禮監掌印大太監王振的慫恿下,決定效法自己的曾祖父(明成祖朱棣)和父親(明宣宗朱瞻基)御駕親征。朱祈鎮不顧大臣們的集體反對,在沒有充分準備好的情況下,于七月十六日率領京師三大營最精銳的20萬大軍倉促北征,沒有作戰預案、沒有后勤保障,20萬大軍亂哄哄地就從北京出發,隨行的還有大明帝國最精華的文臣武將百余人。
一開始,朱祈鎮親征的消息著實嚇了也先一跳。畢竟是20萬明軍,也先一度心里打鼓,甚至萌生了退兵之念頭。但是,當也先的斥候(偵察兵)將明軍混亂的行軍狀態以及朱祈鎮倉促出征的實情告知也先后,也先突然覺得這是一個重創明軍的天賜良機。是啊,自徐達北伐(1368年)以來,草原各部與明軍的作戰,一直都是敗多勝少,草原勇士一度對明軍產生了心理陰影,雖然貓兒莊和陽和兩場勝仗打敗了明軍,但畢竟明軍主力尚在,更沒有遭到重創,也先迫切需要一場大勝來提振草原各部的士氣。如今朱祈鎮主動送上門來,沒有不接的道理。
八月初,朱祈鎮大軍出長城,在大同城外與瓦剌前鋒遭遇,明軍失利,平鄉伯陳懷戰死。朱祈鎮和王振第一次直面血淋淋的戰場,被嚇到了。于是,王振勸說朱祈鎮撤軍,朱祈鎮也同意撤軍,明軍開始向長城內運動。也先發現明軍有撤退動向,一旦明軍退回長城,再憑借長城堅守,也先就無法吃掉這股明軍了。于是,也先開始瘋狂追擊明軍,誓要在長城外全殲這支明軍精銳。
為擺脫也先的追擊,朱祈鎮命令成國公朱勇和永順伯薛綬率5萬明軍騎兵阻擊也先。明軍與瓦剌軍在鷂兒嶺(今河北涿鹿西北)遭遇。監軍劉僧不了解地形,率領明軍貿然沖入也先布置的伏擊圈,朱勇擔心劉僧出事,也率軍沖入敵陣,結果遭到瓦剌伏擊,大敗,朱勇陣亡,明軍全軍覆沒,是為鷂兒嶺之戰。
車駕將發,宣府諜報虜眾襲我軍后,遂駐蹕,遣恭順侯吳克忠為后拒,克忠力戰敗沒,將晚報至,又遣成國公朱勇、永順伯薛綬領官軍四萬赴之,勇綬至鷂兒嶺,冒險而進,遇虜伏發,亦陷焉。——《明英宗實錄》
鷂兒嶺之戰,成國公朱勇戰死,朱勇的父親朱能是當年追隨朱棣「靖難之役」的二號功臣,朱勇也深得父親真傳,是大明不可多得的名將,朱勇的戰死對明軍的士氣打擊是致命的。但是朱勇的努力也為明軍主力撤離爭取了1天寶貴的時間。如果但是朱祈鎮彭果斷撤退,明軍完全可以全部撤回長城以內,可惜「攪屎棍」王振再次發揮「腦回路」,王振以大軍回踏壞麥苗為由,讓明軍不走居庸關而是繞道宣府,如此一來明軍多走了一倍以上的路程。八月十三日,在宣府與懷來之間的小城土木堡被也先追上,也先切斷土木堡的水源,明軍立時大亂,也先趁勢掩殺,明軍全軍覆沒,朱祈鎮本人也被俘虜,開始了長達一年的瓦剌「留學」生涯。