[実現したいこと]
Vueテンプレートファイルにて作成したPOSTの内容をaxios経由でLaravel DBへ保存。その後Viewファイルにリダイレクトさせて最新の投稿1件を表示させたいです。
[問題点]
しかし、リダイレクト先のviewファイルには最新の投稿の1件前の投稿が表示されます。
そして画面をリロードすると、最新の投稿が表示されます。
・ローカル環境では時々意図した通りに最新の投稿が取得、表示できますが、基本的には1件前の投稿が表示されます。(要は時々意図した動きをしてくれる)
・heroku環境だと100%上記問題の症状が発生します。
[原因]
なぜこの様なことが起きるのか?
「Vue axios経由POST処理が遅くて「axios経由でのPOST」がLaravel DBに保存される前にリダイレクトされるために、最新の投稿ではなくひとつ前の投稿が表示されている。」
と問題の原因を考えていいます。
(投稿の内容はLaravel DBに保存されています。)
[試したこと1]
リダイレクト先のviewファイルにcacheが残っているのか?と思い、cache.phpに以下を記載。.env CACHE_DRIVER=none に設定。
cache.php
1 'none' => [ 2 'driver' => 'null', 3 ],
症状改善せず。
[試したこと2]
キャッシュを無効にするためにapp.blade.php <head></head>内に以下を記載
app.blade.php
1<meta http-equiv="Cache-Control" content="no-cache">
症状改善せず。
[試したこと3]
laravelのリダイレクト処理にタイムラグを設ける。
方法が分からず、、、(そもそもそんな方法あるのか。。。。)
以上です。
どうすれば、Vueテンプレートファイルにて作成したPOSTの内容をaxios経由でLaravel DBへ保存。その後Viewファイルにリダイレクトさせて最新の投稿1件を表示させることができるでしょうか?
vueテンプレートファイルのメソッドは以下の様に書いています。
javascript
1 //////////Canvasのデータをblob化/title/commentをaxiosでPOST////////// 2 let saveCanvas = (canvas_id) => { 3 const type = "image/png"; 4 const canvas = document.getElementById(canvas_id); 5 const dataurl = canvas.toDataURL("image/jpeg", 0.85); 6 const bin = atob(dataurl.split(",")[1]); 7 const buffer = new Uint8Array(bin.length); 8 for (let i = 0; i < bin.length; i++) { 9 buffer[i] = bin.charCodeAt(i); 10 } 11 12 const blob = new Blob([buffer.buffer], { type: type }); 13 14 //new FormData() を作成 15 const data = new FormData(); 16 data.append("canvas", blob, "png"); 17 data.append("title", title.value); 18 data.append("comment", comment.value); 19 20 axios 21 .post("/api/images", data) 22 .then((res) => { 23 console.log("success"); 24 }) 25 .catch((error) => { 26 new Error(error); 27 }); 28 };
あなたの回答
tips
プレビュー