前提・実現したいこと
プログラム初心者で、python3とJavaScriptを独習しているものです。
いまjQueryのajaxを使ってJSONデータの送受信の勉強をしています。
プログラムとしては、ブラウザに表示されたボタンを押すと、ブラウザのコンソールにメッセージが表示されるというものです。
※今回のプログラムの構成
- pythonの簡易サーバ/Apacheサーバ
-
┣index.html(jQuery)
-
┗cgi-bin
-
┗sample.py
試行錯誤の結果、JSONの通信は出来ました。
ただ、cgi(python3)側の送信内容に疑問があります。
発生している問題・エラーメッセージ
cgi(python3)の参考資料を見ると、データ送信時によく以下の出力をすべきとの指示があります。
print("Content-type: application/json")←おまじないだが今回はこれが原因で通信できなかった print("\n\n") ←おまじないだが今回はこれが原因で通信できなかった print(json_data) ←送信したい内容 print('\n') ←おまじないだが今回はこれが原因で通信できなかった
ただ今回は、このおまじないが原因で通信ができませんでした。
そこで質問なのですが、このおまじないの意味はなんでしょうか?
現在はもう不要で良いのでしょうか?
<以下、追記しています>
具体的には以下の状況となります。
今回のプログラムですが、通信ができないとChrome-デベロッパーツール-Conslole-messageに『失敗』の表示がされます。
おなじないが無いと、メッセージ内容『python is good!!』がきちんとChromeのコンソールに表示されます。
ですので、以下の状態になるにもかかわらず、多くの資料でおまじないを付ける理由を知りたいと思っています。
・おまじないが無いとJavaScript側でdata.resultに『OKが格納される』
・おまじないが有るとJavaScript側にdata.resultに『OKが格納されない』
<追記終わり>
※念のため、Apacheでも実行しましたが同様の結果でした。
該当のソースコード
python3
1start.py 2#簡易サーバで起動 3from http.server import HTTPServer, CGIHTTPRequestHandler 4 5class Handler(CGIHTTPRequestHandler): 6 cgi_directories = ["/cgi-bin"] 7 8PORT = 8080 9httpd = HTTPServer(("", PORT), Handler) 10httpd.serve_forever()
html
1index.html 2<!DOCTYPE html> 3<html lang="ja" dir="ltr"> 4<head> 5 <meta charset="utf-8"> 6 <title>jQueryのテスト</title> 7 <script src="https://code.jquery.com/jquery-3.5.1.min.js" charset="utf-8"></script> 8 <script> 9 jQuery(function ($) { 10 //開始行 11 $("#sample").on("click", function(){ 12 $.ajax({ 13 url:"cgi-bin/sample.py", 14 type:"post", 15 dataType:"json", 16 data:{ 17 "myname":"yamada", 18 "mypass":"abcde", 19 "myclss":"level2" 20 }, 21 success:function(data){ 22 if(data.result==="OK"){ 23 console.log(data.message); 24 }else{ 25 console.log("失敗"); 26 } 27 } 28 }); 29 }); 30 //終了行 31 }); 32 </script> 33</head> 34<body> 35 <form> 36 <input type="button" id="sample" value="サンプル"> 37 </form> 38</body> 39</html>
python3
1sample.py 2import json 3import os 4# 不要なインポートは省略 5 6def main(): 7 # おまじない 8 print("Content-type: text/html; charset=UTF-8") 9 print("\r\n\r\n") 10 11 # POSTデータの判定 12 if (os.environ['REQUEST_METHOD'] != "POST"): 13 print("METHOD不正") 14 15 # データ取得、取り出す処理(省略) 16 17 dict = {"result": "OK", "message": "python is good!!"} 18 json_data = json.dumps(dict) 19 20 # 不要なおまじない 21 # print("Content-type: application/json") 22 # print("\n\n") 23 print(json_data) 24 # print('\n') 25 26 27if __name__ == "__main__": 28 29 main()
補足情報
Python 3.6.8
Google Chrome(最新)
Windows 10
回答2件
あなたの回答
tips
プレビュー