1. 程式人生 > >在網頁載入完成後執行——body的onload()

在網頁載入完成後執行——body的onload()

    記得誰說過:前臺開發,往往一個問題糾結半天,還沒有技術含量。對這些真的是深有體會了。還是要多多積累吧。

    最近遇到了一個問題:點選datagrid的行,跳轉到相應的詳情介面,並進行一系列的查詢然後將內容返回到頁面上。這時,問題就來了。

先說一下一開始我的程式碼:

datagrid行單擊事件:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>$("#dgApply").datagrid({
		onClickRow:function(index,data){
			var row=$('#dgApply').datagrid('getSelected');
			var ApplyId = row.ApplyId;
			//跳轉頁面,並且傳遞ApplyId
			window.location.href = "querApplyIndex"+"?ApplyId="+ApplyId;
			//頁面載入完成後,執行查詢方法。
			$.ajax({
				type:"POST",
				url:'querApplyByAppId?ApplyId='+ApplyId,
				success:function(result){
					//給相應的控制元件賦值
					document.getElementById('queryApplyState').innerText=result[0].State;
					document.getElementById('queryApplyTime').innerText=result[0].CreateTime;
					document.getElementById('applyFlow').innerText=result[0].FlowName;//申請流程
					document.getElementById('applyflowContent').innerText=result[0].FlowContent;//流程說明
					document.getElementById('applyContent').innerText=result[0].ApplyContent;
				}
				
			});//---ajax結束
		}
	})</strong></span>


注:queryApplyIndex為呼叫Controller相應的方法。

這時,設斷點走js,你會發現執行window.location.href之後,頁面是還沒有載入成功的,但是它直接就執行ajax的查詢方法,下面給相應的控制元件賦值的語句了。注意:現在頁面還沒有載入成功!!

報錯如下:


大概意思就是:我都抓不到這個id,怎麼給它的innerText賦值呢?

那然後,我們要怎麼辦呢?這可傷死腦筋了。

後來一個論壇的帖子,給予了我們靈感。這就提到了我們題目中的body的onload()

其實特別簡單。在我們要跳轉的jsp的body裡新增一個onload事件就好:


注:queryApply()直接呼叫js方法就可以。

我們只需要把原來執行查詢的ajax重新寫到queryApply()裡面就可以了。如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>function queryApply(){
	//從位址列獲取地址,擷取申請id
	var url=document.location.href;
	var pos=url.indexOf("=");
	var pos1=pos+1;
	var len=url.length;
	var ApplyId=url.substr(pos1,len);
	//執行相應的查詢方法
	$.ajax({
		type:"POST",
		url:'querApplyByAppId?ApplyId='+ApplyId,
		success:function(result){
			//給相應的控制元件賦值
			document.getElementById('queryApplyState').innerText=result[0].State;
			document.getElementById('queryApplyTime').innerText=result[0].CreateTime;
			document.getElementById('applyFlow').innerText=result[0].FlowName;//申請流程
			document.getElementById('applyflowContent').innerText=result[0].FlowContent;//流程說明
			document.getElementById('applyContent').innerText=result[0].ApplyContent;
		}
		
	});
	
	
}</strong></span>

    問題就解決了。前臺的一些讓我們傷腦筋的問題,往往都是一句程式碼的事,我們還是應該多多積累,慢慢來。不能因為技術含量低就忽視,慢慢積累,就會成為前臺大神。大家有什麼其他好的解決方法,請多多指教。