JS暫停函式(類似java中的sleep)
阿新 • • 發佈:2019-01-28
開發需求:一個修改產品資訊的頁面,需要從資料庫讀取資料到頁面,然後JSP動態顯示。頁面中有一個下拉列表,這個列表也需要從資料庫中讀取,並且需要根據產品中的分類欄位讓下拉表預設選中相應的元素。
開發思路:當用戶請求跳轉這個頁面時-->控制器接受請求,然後呼叫業務層取得產品資料-->返回給JSP頁面-->頁面中使用Ajax技術傳送一個請求到控制器-->控制器取得產品分類資料-->返回給頁面-->在頁面中取得產品分類的id,通過js函式比對<select>中<option>的value屬性,判斷是否相等,如果相等則預設選中。(產品和產品分類為2張不同的表)
這個過程中遇到的最大的問題是:Ajax返回資料 和 js比對資料的時序性問題。JS函式比對資訊必須在Ajax請求完成且伺服器端發出響應後,而寫JS程式碼測試的時候反覆重新整理偶爾才能獲取到預設值,這不是我想要的效果。此問題的解決方案是:讓這個onload的JS函式在執行過程中暫停XX毫秒,然後再繼續,下面直接帖程式碼:
//js暫停函式 function Pause(obj,iMinSecond){ if (window.eventList==null) window.eventList=new Array(); var ind=-1; for (var i=0;i<window.eventList.length;i++){ if (window.eventList[i]==null) { window.eventList[i]=obj; ind=i; break; } } if (ind==-1){ ind=window.eventList.length; window.eventList[ind]=obj; } setTimeout("GoOn(" + ind + ")",iMinSecond); } //js繼續函式 function GoOn(ind){ var obj=window.eventList[ind]; window.eventList[ind]=null; if (obj.NextStep) obj.NextStep(); else obj(); }
呼叫過程為:
//選中系統分類 function checkSystemIdentity(param) { Pause(this,100); this.NextStep = function(){ var systemTypes = document.getElementById('systemType'); for(i=0;i<systemTypes.options.length;i++){ var temp = systemTypes[i].value; if(temp ==param){ systemTypes[i].selected="true"; } } } }