在講AJAX之前,我們要了解一下時間線,也就是JS的加載過程
時間線的存在對代碼的邏輯有影響,就是加載順序先后的影響
時間線是個什么步驟,
1.創建document對象,瀏覽器開始去解析你的html界面,document.readyState = "loading"
2.當遇到外部資源(外部的js文件,外部的css文件,外部的圖片,a標簽,iframe標簽)的時候,除了script標簽中的src(當沒有設置異步的屬性async,defer)為同步,其余的全部為異步(主線程去調度子線程完成)。有且只有這一個script標簽中的src為同步
dom解析完成以后 document.readyState = "interactive"
我理解為JS從上到下執行的話,碰到外部鏈接(css,js,iframe...)會先進行下載,在未下載之前,頁面不會進行接下來的步驟
除了script標簽中的,其他的所有外部資源下載完成
下載完成以后,document.readyState = "complete"
window觸發load事件
DOMContentLoaded(jquery中ready方法的封裝),這是唯一一個有大寫字母的事件名稱
這個事件和load事件有什么區別呢,DOMContentLoaded事件的效率高於load,因為DOMContentLoaded是在html解析完成后就執行,而load是在頁面上多的資源,也就是圖片、媒體等加載完成后才執行
我們來看看一個例子
明明我先寫的load事件,卻先打印出DOMContentLoaded,就是因為時間線的加載問題,這個簡單的例子明顯的反應了上面所說的時間線的加載過程
———————————————————————————————————————————————————————
JS的異步加載方案有三種
1.defer 僅限IE
2.async html5中新增屬性
3.按需加載:
創建script標簽
為其設置src屬性
成為異步后再插入到dom中
這是個啥操作呢?
在AJAX中,一般都是采用JSON格式進行數據傳輸
JSON數據格式很嚴謹,必須是雙引號包裹數據
這里有兩個方法可以將json數據進行轉換
1.JSON.stringify() 把json對象轉換成json字符串
此方法需要用一個變量接受
2.JSON.parse() 把json字符串轉換成json對象
我們再將這個變量變為json數據格式
記住,json數據格式只能用雙引號包裹