Ajax でデータをやりとりしていて取得したデータが更新されていないパターンがあった。
ログを見ると、どうやらキャッシュが効いてて新しくデータを取得せずに、キャッシュからデータを引っ張ってきていた。
下記記事のとおりなんだけど、パラメータにタイムスタンプを追加することで解決する。
サンプルコード
- Http クライアントは axios を使用。
import axios from 'axios'
class Api {
constructor() {
}
/**
* endpoint: string
* param: object|null
* callback: function(error int|null, message string, data object|null)
*/
get(endpoint, params, callback) {
let sendParams = (params == null) ? {} : params
// キャッシュが効いている場合があるので、パラメータにタイムスタンプを追加する。
// そうすることで常に新しいデータを取得する。
sendParams.timestamp = new Date().getTime()
axios({
method: 'get',
baseURL: 'https://api.xxxxxxxx.sample',
url: endpoint,
params: sendParams,
})
.then((response) => {
// handle success
callback(null, 'success', response.data)
})
.catch((error) => {
// handle error
if (error.response) {
callback(error.response.status, error.message, error.response.data)
return
}
// 503: Service Unavailable
callback(503, error.message, null)
})
.then(() => {
// always executed
})
}
}