當進入頁面初始化datagrid的時候發現向後臺發送了兩次請求,獲取數據的方法執行了兩次,但我初始化datagrid的時候並沒有定義URL屬性,肯定也不會發送請求;往下代碼能發送請求的就只有$grid.datagrid("load")這壹句,最多也只會發送壹次,但事實是兩次,這是為什麽呢,難道這是easyui的壹個BUG嗎?經過斷點調試與思考,我發現datagrid在初始化的時候,即使不定義URL屬性,也會有“處理中,請稍候。。。”這樣的加載中效果(持續那麽壹瞬間),但是肯定沒有發送請求的,估計源碼中通過setTimeout來實現。問題就出在這裏了,就是在setTimeout的過程中,我下面的代碼定義了URL屬性,setTimeout後發現URL被定義了,所以照樣發送了壹個請求,然後我load了壹次,又重復發送了壹個請求。了解了這樣的原理後,我通過加入setTimeout解決了這個問題:
window.setTimeout(function(){
$.extend($grid.datagrid("options"),{
url : "ServiceData/getCountYearData.do",//這裏定義url
queryParams : { ids:cityid}//根據實際情況定義參數
});
$grid.datagrid("load");
},100);//延遲100毫秒執行
補充解決方法
html代碼中利用class聲明了datagrid,導致easyUI解析class代碼的時候先解析class聲明中的datagrid,這樣組件就請求了壹次url;然後又調用js初始化代碼請求壹次url。這樣導致了重復加載,解決的方法就是只用壹種初始化方法來聲明easyUI組件以避免重復的提交請求,即刪除html中的class聲明(class="easyui-datagrid")
/jedjj.html
上一篇:加速西瓜種子發芽的五種方法下一篇:妝溯系統的功能給化妝品企業提供怎樣的作用?有人知道嗎?