1. 程式人生 > >【JavaScript】關於history.go()的ajax請求快取問題

【JavaScript】關於history.go()的ajax請求快取問題

前言:window.history.go()方法可載入歷史列表中的某個具體的頁面,例如你開啟一個瀏覽器後,然後又連續跳轉了幾個頁面,window.history.go(-1)就會跳轉到當前頁面的上一個頁面,window.history.go(1)就會跳轉到當前頁面的下一個頁面。跟瀏覽器自帶的“後退”“前進”鍵一樣的效果。他們的特點就是,跳轉頁面後瀏覽器不會向伺服器重新提交請求,而是會從快取記錄中載入資料。其中包括ajax請求的資料。

相對應後退、前進的方法window.history.back()window.history.forward()

一、問題重現

<?php
//server.php程式碼
echo  (int)microtime(true) ;
<!-- demo1頁面程式碼 -->
<body>
<a href="demo2.php">跳轉到demo2頁面</a>
<script>
$.get('server.php',function(res,status){
	if(status){
		console.log('demo1頁面');
		console.log(res);
	}
}); 
</script>             
</body>
<!-- demo2頁面程式碼 -->
<body>
<a onclick="window.history.go(-1)">返回到demo1</a>
<script>
$.get('server.php',function(res,status){
	if(status){
		console.log('demo2頁面');
		console.log(res);
	}
}); 
</script>             
</body>

其中,php程式碼返回的當前時間的時間戳。第一個頁面跟第二個頁面分別對server.php進行了get請求,物件響應資訊進行了輸出。

開啟demo1頁面,檢視輸出。然後點選“跳轉到demo2頁面”按鈕,跳轉到demo2頁面,一段時間後,點選“返回到demo1”按鈕。

這時會發現 使用window.history.go(-1)返回到demo1,demo1輸出的時間戳還是跟demo2的一樣,說明頁面對ajax請求返回的資訊也進行了快取。

二、解決方案

給請求連結後面新增隨機數

<!-- demo1頁面程式碼 -->
<body>
<a href="demo2.php">跳轉到demo2頁面</a>
<script>
$.get('server.php?'+Math.random(),function(res,status){
	if(status){
		console.log('demo1頁面');
		console.log(res);
	}
}); 
</script>             
</body>
<!-- demo2頁面程式碼 -->
<body>
<a onclick="window.history.go(-1)">返回到demo1</a>
<script>
$.get('server.php?'+Math.random(),function(res,status){
	if(status){
		console.log('demo2頁面');
		console.log(res);
	}
}); 
</script>             
</body>