前提・実現したいこと
pythonでcgiを作ってみたいと思い、実験としてajaxを使ってjavascriptでjsonファイルを送信し、それをオウム返しするcgiを作りました。
返ってきたデータをコンソールで確認しようとしたところエラーが発生しましたが、解決方法がわかりません。
使っているのは、python3.7と、javaScript、html5です。(開発環境はwindows(Python3.7インストール済み)、ブラウザはfireFoxで検証)
ローカルサーバーを立ち上げて実験しています。
ファイル構成
server/
├ cgi-bin/
│ └ server.py
├cgiserver
├ajax.js
└ index.html
発生している問題・エラーメッセージ
クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、http://127.0.0.1:8000/cgi-bin/server.py にあるリモートリソースの読み込みは拒否されます (理由: CORS ヘッダー ‘Access-Control-Allow-Origin’ が足りない)。[詳細] クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、http://127.0.0.1:8000/cgi-bin/server.py にあるリモートリソースの読み込みは拒否されます (理由: CORS 要求が成功しなかった)。[詳細]
該当のソースコード
cgiserver.py
python
1# -*- coding: utf-8 -*- 2 3import http.server 4 5http.server.test(HandlerClass = http.server.CGIHTTPRequestHandler)
server.py
python
1#!/usr/bin/python3 2# -*- coding: utf-8 -*- 3 4import io 5import os 6import sys 7import cgi 8import cgitb 9import urllib.request 10import json 11 12sys.stdin = io.TextIOWrapper(sys.stdin.buffer,encoding='utf-8') 13sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 14sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') 15 16cgitb.enable() 17 18if os.environ['REQUEST_METHOD'] == 'POST': 19 form = cgi.FieldStorage() 20 print("Access-Control-Allow-Origin: *\n") 21 print('Content-Type: text/json; charset=utf-8\r\n') 22 print(form) 23 24
ajax.js
Javascript
1 2 3ajaxSend = function (json) { 4 console.log("a") 5 var xhr = new XMLHttpRequest(); 6 xhr.open('POST', 'http://127.0.0.1:8000/cgi-bin/server.py', true); 7 xhr.setRequestHeader('content-type', 'application/json'); 8 xhr.send(json); 9 ajaxGet(); 10} 11 12ajaxGet = function () { 13 var req = new XMLHttpRequest(); 14 try{ 15 if (httpRequest.readyState === XMLHttpRequest.DONE) { 16 if (httpRequest.status === 200) { 17 alert(req.responseText); 18 }else { 19 alert('リクエストに問題が発生しました'); 20 } 21 } 22 } 23 catch(e){ 24 alert('例外を補足:'+e.description); 25 } 26} 27 28json = { 29 "messages": 30 [ 31 { 32 "date": "2012/1/12 19:12", 33 "text": "こんばんは" 34 } 35 , 36 { 37 "date": "2012/1/11 19:12", 38 "text": "Hello" 39 } 40 ] 41} 42 43window.onload = function(){ 44 console.log(document.getElementById("ajaxButton")) 45 document.getElementById("ajaxButton").addEventListener('click',a) 46} 47 48a = function(){ 49 ajaxSend(json); 50}
index.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>Javascript試験用</title> 7 <script charset="UTF-8" type="text/javascript" src="ajax.js"></script> 8</head> 9 10<body> 11 <button id="ajaxButton" type="button">決定</button> 12</body> 13</html>
回答2件
あなたの回答
tips
プレビュー