很多新手前端在初期學習的時候往往把注意力放在如何編寫頁面,如何編寫效果上,群里有個朋友問我js是如何與后台交互的,我簡單的說一下。
首先需要知道兩個東西,一個是客戶端,一個是服務器,客戶端其實就是我們在上網時候使用的機器,大部分情況下這個客戶端就是我們的電腦,包括台式電腦,筆記本電腦,手機,平板之類的。那么服務器是什么?服務器其實也是電腦,准確的說服務器是性能比較強大的電腦,正常情況下一台服務器可以連續半年甚至一年不關機,連續運行,這個技能我們家用電腦大多做不到。正是因為服務器可以保持長時間的運行,從而保證我們放在服務器上文件可以隨時都被訪問到.
現在來看一下服務器和客戶端之間的聯系,這里就以網站為基礎,通俗的解釋一下。我們訪問網站大多數使用的都是瀏覽器,通過在地址欄里面寫下域名,按下回車就可以訪問到我們想要訪問的網站,那么這個具體的過程肯定不是那么簡單,我們在地址欄中寫下網址以后,按下回車,這個時候瀏覽器首先會訪問自己所在的電腦上的host文件,查看host文件中是否記錄有我們在地址欄中輸入的域名,如果有,則找到與之對應的ip,訪問去了。如果沒有,它就要去到一個叫做dns的系統中,這個dns是存在於公網中的,他的作用就是保存許多域名和ip(真實的dns系統比這個復雜的多,這里只是方便理解簡述一下),他找到dns以后,把域名告訴dns,讓dns去查一下,看看有沒有與之對應的ip,如果查到了,就會拿着ip去找那個網站去了!!這里說一下,ip實際上可以理解為地址,是我們存放程序時候標記的地址。域名只是為了幫助我們更好的記住,實際上真正要找到網站還是要靠ip。
到此為止,我們已經找到了與這個ip對應的服務器,那么接下來解釋兩者互相對話啦,瀏覽器告訴服務器我要看首頁,服務器回答好,然后把首頁交給瀏覽器,去看吧!!這里我打了一個比方,事實上這個過程都是建立在網絡通訊協議上的,其中有一個最常用的就是http協議,瀏覽器與服務器之間一切交流都是建立在這個協議之上的,這里我簡單的講一下這個協議吧,http協議分為兩部分,分別是請求部分和響應部分,請求部分是又瀏覽器發出的,服務器接受到以后讀取協議內容,然后發出響應,瀏覽器接受到響應的內容,並把它展示到電腦上。http協議中的請求部分分為請求行,請求頭信息,請求消息體三部分,請求行包括我們想要訪問的域名,協議等級,請求消息頭包括具體訪問的文件,連接長度,瀏覽器內核信息等,消息體則是瀏覽器發送給服務器上的具體數據,這個數據只有在發送方式為post的情況才會出現在消息體上,如果是get方式,則出現在地址欄中。服務器收到相關請求以后,開始分析具體要干什么,然后去執行,執行完成以后吧數據全部返回,相應部分就不詳細說明了。
還要注意一件事情,那就是服務器收到請求以后做的事情是如何完成的,我以PHP程序為例。假如服務器收到請求需要訪問網站首頁,那么首先就會去調取后台對應的首頁文件,然后開始解析這個文件,解析的過程中,PHP就發揮作用了,比如說,頁面中的數據都是依靠它來進去讀取的,假如首頁中有一塊地方需要展示出今天的最新新聞,那么PHP就會調用相關程序,然后去訪問數據庫,把對應的數據從數據庫中取出來,然后展示到頁面中,以此類推,其他的的數據都是這樣搞出來的。當然了,PHP還會做很多其他事情啊,比如判斷登錄狀態,檢測ip之類的,最后當PHP把所有要做的事情都做完以后,最后就是把處理好的文件返回給瀏覽器了,這里注意一下,服務返回給瀏覽器的其實就是已經生成好的靜態頁面了,里面沒有一行后台代碼,瀏覽器接收到這個返回到數據,然后開始逐行解析,最后展示給我們看。
以上就是前后台交互流程。至於Js與后台交互,說白了,就是依靠js像后台發送數據,然后接受服務器返回的數據就是了。這里要說到一個技術就是ajax,其實整體的流程都是一樣的,我們通過js的事件觸發ajax,像服務器發送相關數據,服務器得到數據,處理完成以后返回給我們對應的數據,js可以獲取到這個數據,然后該怎么處理就怎么處理,這個和我們上面說的流程基本一樣,區別就是通過 js發送請求可以達到無刷新的效果,正常我們訪問一個頁面,服務器都是整個頁面的返回給我們,如果是通過ajax的話,只會返回我們想要的數據,這樣,是不會刷新頁面的,加快了速度,減少流量的浪費,還有很多好處的,不多說了。(如果不了解ajax,那么可能需要首先學習下ajax哦!!)
這篇文章沒有一句代碼,說的也不是很專業,只能作為入門來了解,有問題的地方,請大家多多指教!