サーバーサイドとフロントサイドでのJSONデータの受け渡しに困っております。
■構成
FLASK上でapp.pyを動かしており、app.pyから発行されるJSON形式のデータを
javascriptのFetchで受け取り、test.htmlに表示したいと考えております。
現状、以下の内容については確認できておりますが、
test.html経由でJSONファイルを取得することができません。
①app.pyを直接ブラウザで開くと、JSONデータが表示されることを確認しております。
②fetchのリンク先に外部のWEB API(JSON形式で応答)を指定した場合には、取得したJSONデータが
正しく表示されました。
思い当たる原因がございましたら、ご教示頂けないでしょうか。
■test.html
■test.html <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: content: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script> let url = "http://127.0.0.1:8888/"; fetch(url) .then(function(response) { return response.json(); }) .then(function(json) { document.body.textContent = JSON.stringify(json); }); </script> </head> <body> <h1></h1> </body> </html>
■app.py
import os import json from flask import Flask, jsonify app = Flask(__name__) filepath = "./LockerKey.json" filename = "LockerKey.json" @app.route('/') def info_json(): if os.path.isfile(filepath): with open(filename, 'r')as f: json_data = json.load(f) else: print("ファイルが見つかりません。") return jsonify(json_data) if __name__ == "__main__": app.run(host='127.0.0.1', port=8888, debug=True)
■LockerKey.json
{"1": {"no": "1", "state": "available", "pass": "111111"}, "2": {"no": "2", "state": "available", "pass": "222222"}, "3": {"no": "3", "state": "available", "pass": "333333"}, "4": {"no": "4", "state": "available", "pass": "444444"}}