#状況
現在、javascriptとpythonで簡単なアンケートサイトを立ち上げ中です。
クライアントサイドはほぼでき、後は、クライアントからjsonでデータをpostし、サーバーはそれを保存して、ランダムな文字列を返却する処理を実装すれば完成です。
(ランダム文字列は後々にアンケートに回答した証拠として使う)
#環境
<サーバー>
Python : 3.6.7
OS : CentOS Linux release 7.6.1810 (Core)
Apache :
| Server version: Apache/2.4.6 (CentOS)
| Server built: Nov 5 2018 01:47:09
<クライアント>
ブラウザ: Chrome バージョン: 73.0.3683.103
OS : windows10
#困っていること
サーバーからクライアントにデータを返す処理でつまずいてます。
特に悩んでいるのは、python3の文法的に正しい処理を追加してもサーバー側でエラーになり原因がわからないでおります。
問題の処理は下記cgiですが「#この処理を消すと動く。」の部分をコメントアウトすると問題なく動き、クライアント側で「hello!」と表示されます。しかし、このままだとサーバーエラーになります。
この行はpython3.6では問題なく実行できるので、原因が全く理解できず。
※ その上、修正前のソースコードではこの行も問題なく動いてました。なんどか修正中にできなくなってしまったので余計どこがどう作用しているのかわからないでおります。
python3
1#!/usr/bin/env python3.6 2# -*- coding: utf-8 -*- 3import json 4import cgi 5import cgitb 6import sys 7import random, string 8cgitb.enable() 9 10print('Content-type: text/html; charset=UTF-8\r\n') 11print('hello!') 12 13#この処理を消すと動く。 14print(''.join(random.choices(string.ascii_letters + string.digits, k=8))) 15#この処理を消すと動く。 16 17data = sys.stdin.read() 18params = json.loads(data) 19 20with open("A.txt", mode="w") as f: 21 json.dump(params, f) 22 23exit()
下記にクライアント側のソースを簡潔に再現しました。
javascript
1class A { 2 constructor() { 3 data = [] 4 data.append(new B(x1,y1)); 5 data.append(new B(x2,y2)); 6 : 7 } 8 : 9 submit() {// クラス配列"data"をJSONに変換して、サーバーにPOST 10 var json = JSON.stringify(this.data); 11 $.post("A.py", json, function(result) {alert(result);}); 12 } 13} 14var a; 15$(function() { 16 a = new A(); 17 $("#submit").click(function() { //ボタンクリック時に関数submit実行 18 a.submit(); 19 }; 20});
#試したこと
「#この処理を消すと動く。」の部分を消して実行すると、クライアント側では「hello!」とアラートが表示され、サーバー側では、dataのJSONデータがファイル「A.txt」に吐き出されます。
また、「#この処理を消すと動く。」の部分をサーバーのpython3.6に対話形式で実行すると正常に実行され、ランダムな文字列が表示されます。
#どうしたいか
とにかく、ランダムな文字列をクライアント側に渡せること。また生成したランダム文字列をjsonに混ぜてファイル出力ができれば、実現方法はこだわりません。サーバー側はpythonにもこだわりません。
ご教授いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/16 08:23
2019/04/16 08:33
2019/04/16 23:44