@arumiti (arumiti)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

HTMLにてディレクトリの更新頻度がわかりません。

質問内容

menuディレクトリ配下のテキストファイルを書き換えたいです。

文章を書き換えてサーバーに再度アップロードしてもテキストファイルが即時更新されません。

即時更新する方法を教えて下さい。

やったこと

キャッシュを取得しないようにHTMLで制御してます。
サムライサーバを利用してますが、設定項目はなさそうでした。

プログラム概要

サンプルコードはこちら
※「<>code▼」ボタン(緑色) → 「DownlodeZIP」から開けます。

ディレクトリ構造
.
├── index.html
└── menu/
    ├── food/
    │   ├── kare-.txt
    │   ├── ra-men.txt
    │   └── udon.txt
    └── drink/
        ├── coffee.txt
        ├── juice.txt
        └── tea.txt
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Cache-Control" content="no-cache">
    <title>Document</title>
</head>
<body>
    <select name="" id="food">
        <option value="kare-.txt">カレー</option>
        <option value="ra-men.txt">ラーメン</option>
        <option value="udon.txt">うどん</option>
    </select>
    <input type="button" value="選択" id="btnFood" onclick="btnClick('food')">
    <textarea name="" id="food_result"></textarea>

    <select name="" id="drink">
        <option value="tea.txt">お茶</option>
        <option value="coffee.txt">コーヒー</option>
        <option value="juice.txt">ジュース</option>
    </select>
    <input type="button" value="選択" id="btnDrink" onclick="btnClick('drink')">
    <textarea name="" id="drink_result"></textarea>

    <script>
        async function btnClick(category){
            let menu = document.getElementById(category).value;
            let dir = "menu" + "/"+category + "/" + menu;

            try{
                let response = await fetch(dir);
                //fetchでディレクトリ探査。見つからない場合にerrorを返さない為ifで検知
                if(!response.ok){
                    throw new Error("テキスト取得失敗" + response.statusText);
                }
                
                let text = await response.text();
                document.getElementById(category + "_result").value = text;
                
            }catch(e){
                alert("メニュー取得失敗" + e);
            }
        }
    </script>
</body>
</html>
0 likes

2Answer

metaにno-cacheを入れてもそれはHTMLにしか効かないので,fetchによって取得するキャッシュは制御できません.
fetchの場合はここ↓を.

どうしてもfetchでキャッシュを取得させたくない場合は何かしら変化するパラメータをクエリに渡すことで回避できることもありますが,サーバの負荷対策を無視するのでむやみに利用すべきものでもありません.
同様にno-storeの利用も計画的に.

await fetch("someurl?" + new Date())
2Like

Comments

  1. どうでもいいことですが,今日日Vanillaでonclick属性を書くのはちょっとお行儀がよくないので,addEventListenerを使ってください.

  2. 数年前IEのajaxで画面に追加したタグのonclick属性が無効になる現象をみたことがあります。そのとき結構怖かった。幸いIEがなくなりました。

URLに時間の要素をつけて、サーバ側は別URLと認識してもらって再取得するようになる(かもしれません)。

let menu = document.getElementById(category).value+"?dt="+new Date().getTime();
0Like

Your answer might help someone💌