質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1766閲覧

AjaxでJSONファイルを読み込む作業を繰り返しても、dataの値が変わりません。

aiueo19

総合スコア19

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/02/06 15:21

編集2020/02/06 15:43

pythonでjsonファイルにキー("number")とfor文により変化する値("1"、"2"、"3"、"4"、"5"、"6"・・・)をwith open(このwith openはfor文内にあります)で書き込みながら
Ajaxで刻々と変化し続ける以下のコードでjsonファイルから変化する値を読み込み、id="hello"のタグに代入する作業をループさせると

javascript

1function ajax_func(){ 2console.log('ajax start'); 3var deferred = new jQuery.Deferred(); 4$.ajax({ 5url:'../static/json/test.json', 6data: {name:'number'}, 7dataType:'json', 8}).done(function(data){ 9$('#hello').text(data.number); 10}).fail(function(){ 11}).always(function(){ 12deferred.resolve(); 13}); 14return deferred; 15}; 16setInterval(ajax_func,300);

3ミリ秒ごとに「ajax start 1」がコンソールに出力され、ずっと1しか出ません。
なぜ最初に読み込まれた値がずっと保持されているのでしょうか?
ちなみにpython側でjsonをfor文内にwith openを使い読み取ったものをprintするとちゃんと1,2,3,・・・と増えて表示されます。
エラーメッセージは何もありません。

この問題を解決するにはどうすればいいでしょうか。
よろしくお願い致します。

追記:F12キーを押し、NetworkのページでDisable Cacheにチェックを入れたところ、コンソールに「1,2,3,...」と出力されるようになりました!

ですが、あくまでデベロッパーツールを開いているときのみ正常に出力され、デベロッパーツールを閉じるとまた値が固定のまま出力されてしまいます。

キャッシュを削除するコードは色々あるかと思いますが、FlaskのCacheクリアメソッドをfor文の中に入れたところ、現状何も変わりません。
キャッシュを削除するコードはどのあたりに入れるべきでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://tutorialmore.com/questions-1379104.htm
上記のサイトに書いてある

python

1@app.after_request 2def add_header(r): 3 """ 4 Add headers to both force latest IE rendering engine or Chrome Frame, 5 and also to cache the rendered page for 10 minutes. 6 """ 7 r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" 8 r.headers["Pragma"] = "no-cache" 9 r.headers["Expires"] = "0" 10 r.headers['Cache-Control'] = 'public, max-age=0' 11 return r 12

このコードを記述したところ、ブラウザのキャッシュが無効化され正常に動作しました。

投稿2020/02/06 16:07

aiueo19

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2020/02/06 23:05

上記のうち、public はキャッシュしてもよいという指令なので、含めるべきではありません。この行を削除し、max-age=0をmust-revalidateの後に指定したらどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問