(1)分析
從特性上將,表單具有默認的提交行為,默認是同步的,即同步表單提交,瀏覽器會鎖死(轉圈... ...),等待服務端的響應結果。接下來做下對比分析
(2)異步提交,首先看下案例里的異步提交
異步表單提交:form標簽內部不再編寫action和method,而是通過ajax的url和method選項去實現提交
(3)同步提交
同步提交時不再需要ajax,而是直接在form表單的開始標簽里添加action和method屬性實現,接下來開始進行注冊
點擊提交按鈕
再次刷新頁面,內容如下
同步表單提交,瀏覽器會直接將服務端響應內容,直接渲染到客戶端瀏覽器所謂的(頁面容器中)
接下來做下修改,服務端返回HTML字符串內容,如下所示
此時再次刷新頁面,結果如下
此時呈現的內容不應該稱之為頁面,而是容器。瀏覽器將服務端返回的html字符解析渲染到了所謂的頁面容器里。因此,同步請求返回結果,瀏覽器都會進行顯示覆蓋。
接着將html字符串改為數字,測試如下
總結如下:同步提交,瀏覽器會將響應結果直接進行覆蓋,之前的表單便會被覆蓋,替換成服務端返回內容
所以AJAX出現之前,都是這么同步操作表單提交的
直到后來一個不懂編程的設計交互師提出來該交互效果體驗差,才有所改變
(4)其他處理辦法
在AJAX誕生之前,有人想到辦法解決了上述這種問題。之前的問題是“提示和交互不在同一個頁面”,那么這種新辦法便是直接再次重定向到該頁面,這樣便不用離開當前頁面,體驗更為合理一點。
該方法優點:1、不用離開當前頁面;2、保留用戶之前輸入的內容
1、服務端重定向
此時的結果便是提交重復信息時刷新頁面
2、展示報錯信息
此時重復提交內容時,表單同步提交,頁面刷新且出現報錯信息
分析:之所以可以直接在html模板頁面編寫{{error_message}},因為第一次到注冊頁時是get請求,沒有error_meaage內容,所以不會展示。如下所示
3、同類對比
直到現在,任然有很多網站用這種同步表單操作,刷新頁面,展示錯誤信息。例如GitHub,如下所示:點擊時會同步提交表單內容,刷新頁面,刷新完畢后,將錯誤內容展示到新頁面
注意:這里沒有異步請求,所有的操作都是通過服務端返回的。
4、使用緣由
現在已經有了AJAX,但很多網站任然使用這種方式,原因:服務端處理起來更加安全一些,雖然會給服務器帶來一些壓力,但鑒於安全性,大企業擇優選取方案。
當前還有其他原因,例如保證交互的一致性,有的可能不支持ajax,用這種方式會使用戶體驗更加統一,避免很多麻煩。
5、保留用戶 初始輸入內容
注意:第一次加載注冊頁時,沒有form_data數據,所以如果直接在html模板頁使用form_data.email和form_data.nickname無法直接獲取,還會報錯。 因為此時的form_data為undefined,所以無法使用對象操作符獲取對應屬性
密碼位置一般會在刷新后清空,測試如下
(5)方法對比
上述服務器同步操作方法在於更加安全,用戶體驗更統一。
但服務端無法直接操作DOM,所以也不可能在客戶端頁面追加文本或其他內容,所以無法做出漂亮的用戶體驗特效... ...
這種方式操作稍微有些繁瑣。
現在倡導降低前后端耦合,避免服務端處理客戶端內容。直到后來AJAX的誕生,可以在客戶端結合后台響應操作DOM,同時實現一些絢麗的特效,使得交互更加豐富。
(6)其他框架
1、在很多框架例如Ruby(日本人)編寫發明,很好實現了分離開發
2、國內之前有過“易語言”,使用中文編寫代碼... ...(中文偏向抒情、英文更具邏輯)
3、現在比較火的Vue,實現了前后端分離開發,甚至連路由控制都由前端操作,服務端只需操作數據。即數據和頁面完全分離,前后端只通過接口進行交互。完全有客戶端控制頁面。
(6)小結
同步提交表單內容會導致瀏覽器鎖死,頁面刷新,異步提交表單內容不會發生鎖死,瀏覽器任然可以干別的事情。
異步交互沒有刷新頁面,實現頁面局部更新
同步提交表單數據:主要依靠服務端進行處理 異步提交:服務端只需要返回交互的業務信息,具體由客戶端進行交互效果的編寫