1. 程式人生 > >淺談JavaScript、jQuery、AJAX、JSON 這四個之間的關系

淺談JavaScript、jQuery、AJAX、JSON 這四個之間的關系

quest sig 出現 情況 put 自己 工具庫 mis ava

1. JavaScript

JavaScript(簡稱js)是一種主要運行於瀏覽器中的弱類型的動態腳本語言,可以用來實現網頁上的一些高級功能,
如數據驗證處理、頁面動態效果、定時任務、與用戶交互、發送/接收服務器端數據等等。

① js中的變量在聲明的時候不需要指定類型,其實際類型由程序運行中的賦值決定,
② 函數可變。js允許在運行過程中使用eval動態執行字符串裏的命令,也可以通過new Function等方式由字符串動態構造函數
③ 函數可以被創建、修改、刪除,可以從已有函數構造出新函數
④ 對象的成員可代變,可以動態添加、刪除成員屬性或成員方法。

弱類型指的是js中的變量在參與運算的時候可以根據實際需要動態轉換類型。
js也可以在瀏覽器之外的其他場合使用,如服務器端的Node.js、java的Rhino、無界面瀏覽器PhantomJS等。

2. jQuery

jQuery是js的一個工具庫,由John Resig在2006年發布。
j代表JavaScript,query是“查詢”的意思。也就是說,這個庫的意圖是基於JavaScript的查詢。查詢的目標是什麽?答案是DOM(文檔對象模型)結構中的Node(節點)。一個網頁就是一個html文檔,而網頁上的所有內容都是節點,包括文檔節點、元素節點、文本節點、註釋節點、屬性節點等等。而jQuery的查詢最主要針對的是元素節點,如段落(p)、錨點(a)、表格(table)等,同時jQuery還可以用attr方法方便地對元素節點的屬性進行讀取/設置。

在jQuery出現之前,在js程序中獲取元素節點比較麻煩,例如獲取id為elem1的節點:
document.getElementById(‘elem1‘)
或者是獲取頁面上的所有checkbox元素,首先需要獲取input類型的元素:
document.getElementsByTagName(‘input‘)
然後對獲得的元素列表進行for循環處理,逐個判斷其類型是否為checkbox。
如果有更多元化的查詢要求,則對應的js代碼也會相當復雜。雖然有一些庫可以解決這方面的需求,但強大程度、易用性等方面都不太理想。John Resig發現了一個盲點——css樣式應用到頁面上的元素時,是有一套規則的,即css選擇器,瀏覽器可以通過css選擇器找到匹配的元素並將指定的樣式應用到這些元素上。也就是說,通過css選擇器可以有效地進行元素查找定位,但它最初只被用於樣式領域。

於是,John Resig根據css選擇器編寫了jQuery選擇器,並對選擇器的規則進行了擴充,從而讓元素查找變得非常方便。
例如,上面2個例子用jQuery可以寫為:
$(‘#elem1‘)

$(":checkbox")
同時,jQuery還有一個核心思想——鏈式操作,例如:
$(‘div.con‘)
.height(100)
.show();
這樣的連續調用可以讓代碼書寫更加簡潔,也就是jQuery自己的口號:寫的更少,做的更多此外,jQuery還提供了瀏覽器兼容、樣式讀寫、事件綁定與執行、動畫等特性,後來又加入了ajax、promise等,再加上方便的插件編寫機制,對整個js的生態圈產生了重大的影響,可以說是js歷史上影響力最大的一個庫。

3. ajax

ajax全稱Asynchronous JavaScript and XML(異步的JavaScript與XML),是網頁無需刷新頁面、使用js與服務器進行交互的一種技術。

有時候會有這樣一種需求:只希望更改頁面上的一個區域。然而在從前的技術框架內只能刷新整個頁面,帶來的後果是:
①需要重新傳輸整個頁面,服務器端與客戶端的流量消耗都會比較大;
②如果是動態頁,服務器端需要重新生成整個頁面,即使是那些客戶原本不想要刷新的區域,增大了服務器的負擔。ajax的基本流程可以概括為:頁面上js腳本實例化一個XMLHttpRequest對象,設置好服務器端的url、必要的查詢參數、回調函數之後,向服務器發出請求,服務器在處理請求之後將處理結果返回給頁面,觸發事先綁定的回調函數。這樣,頁面腳本如果想要改變一個區域的內容,只需要通過ajax向服務器獲取與該區域有關的少量數據,在回調函數中將該區域的內容替換掉即可,不需要刷新整個頁面。

XMLHttpRequest在發送請求的時候,有兩種方式:同步與異步。同步方式是請求發出後,一直到收到服務器返回的數據為止,瀏覽器進程被阻塞,頁面上什麽事也做不了。而異步方式則不會阻塞瀏覽器進程,在服務端返回數據並觸發回調函數之前,用戶依然可以在該頁面上進行其他操作。ajax的核心是異步方式,而同步方式只有在極其特殊的情況下才會被用到。

XMLHttpRequest在早期IE瀏覽器裏是使用ActiveX來實現的,並不是瀏覽器自身的對象。
後來其他各家瀏覽器也都實現了XMLHttpRequest對象,而高版本IE也把XMLHttpRequest改為了瀏覽器的內建對象。

4. JSON

JSON全稱JavaScript Object Notation(js對象標記法),從名稱上就可以看出來,JSON是基於JavaScript的,是JavaScript的一個子集。JSON是用JavaScript語法來表示數據的一種輕量級語言。

從ajax的命名中我們就可以看到,數據交換是通過XML格式進行的。在ajax剛出現的時候,絕大多數應用都是采用XML格式,
也有少數使用純文本的。但是XML格式有一個缺點,就是文檔構造復雜,需要傳輸比較多的字節數。在這種情況下,JSON的輕便性逐漸得到重視,
後來替代XML成為ajax最主要的數據傳輸格式。可以舉個簡單的例子感受一下二者的區別:
<!--XML-->
<?xml version="1.0" encoding="utf-8"?>
<root>
<article>
  <title>Article Title1</title>
  <content>content1</content>
</article>
<article>
  <title>Article Title2</title>
  <content>content2</content>
</article>
</root>
<!--JSON-->
{
"article" : [
{
  "title": "Article Title1",
  "content": "content1"
},
{
  "title": "Article Title2",
  "content": "content2"
}
]
}
XML規範實際上是比較復雜的,單純作為數據傳輸來說它太重了。

淺談JavaScript、jQuery、AJAX、JSON 這四個之間的關系