2020/1/18 關於使用hash值不能實現頁面請求數量減少的問題

如圖:

在開發一個p2p網站的過程中遇到這樣的問題:

即使用二級路由加載頁面(目的是爲了不讓頁面刷新)

這裏文件的獲取同樣是通過ajax請求實現的

問題在於每一次點擊二級路由加載頁面時

瀏覽器都會重新加載一次一級頁面,personal.html,如圖:

源代碼如下:

於是我嘗試做一個改進,

通過hash的值進行判斷,當前頁面是否爲personal頁面:

如果是:那麼不用加載personal.html,直接加載二級頁面;如果不是:那就加載一級頁面,再加載其對應的二級頁面;

改進如下:

我發現,因爲一級頁面本身就是通過判斷hash值來決定加載的,而一開始如果不在個人中心頁,那麼就必須先加載"#personal"頁面,而如果在個人中心頁面,那就說明hash值"#personal"是被加載過的,但又因爲二級路由需要放在一級路由的回調函數中(爲了消除異步,實現同步),所以可以認爲,當我使用hash來判斷頁面的加載情況時,一二級頁面是綁定在一起的,即只要想加載二級頁面,就必須先加載一級頁面,所以無法通過判斷一級hash值決定二級頁面是否加載。

於是我們換個思路,直接通過判斷當前主頁面內一級頁面中必然含有的dom結構的存在情況來判斷是否再次加載一級頁面,先找到personal的dom節點:

再在index.js裏修改:

這樣就可以實現在personal頁面中點擊二級頁面時,不會重複加載personal頁面了,圖中圈住的地方要注意,判斷一個對象是否存在,不能直接寫:,因爲在jq中$符號包住的東西,不管是什麼,都會被解析爲一個對象,裏面有一些固有屬性名和值,所以這樣判斷會永遠返回true:

所以我們通過$對象中的length屬性來判斷是否存在該節點:

如果在頁面中:那麼length就存在

如果沒在:那麼length就不存在:

其實這裏之前還遇到一個問題,原本二級路由加載的代碼我是這樣寫的:

運行出來發現二級頁面顯示不出來,原因是:load方法是異步執行的

百度了一下:

在jQuery中對Ajax進行了封裝,異步請求的方法共分爲三層:

最底層:$.ajax();中間層:$.get()、$.post()、load();最高層爲:$.getScript()、$.getJSON()。

所以load裏面有個回調函數可以寫,就是我們要寫的二級路由的加載;

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章