3

Python、cgi モジュール、ajax/javascript の組み合わせを機能させようとしています。私のサーバー アクセス (基本的にレンタルされた Web スペース) の性質上、django やその他の Web フレームワークなどをインストールできません。私は今のところcgiで立ち往生しています。Python ファイルを呼び出して単に何かを出力することはできますが、Python ファイルに引数を渡すとなると、cgi.FieldStorage() は入力を受け取りません。FieldStorage の print ステートメントを追加すると、出力は次のようになります。

FieldStorage(None, None, [])

必要なコードはすべて以下にあります。基本的に、(テスト目的で) 私がやろうとしているのは、テキスト入力から文字列を取得し、その末尾に「1」を追加して返すことだけです。

興味深いことに、まったく同じことを行う単純な php ファイルを使用し、それ以外はまったく同じスクリプトで使用すると、スクリプトは問題なく動作します。私が試した典型的なphpスクリプトは次のとおりです。

<?php
$user = urldecode(implode(file('php://input')));
$adj_user = $user . "1";
echo $adj_user;
?>

(Python を使用したいことに注意してください。Python の方がはるかに快適で、PHP はかなり嫌いです。)

私は少し密度が高く、とてもシンプルなものだと感じています。私が間違っていることを見つけるための助けは非常に高く評価されています。よろしくお願いします!

PS私はここに投稿する前に、stackoverflowとWebをかなり調べました。関連するトピックはたくさんありますが、私が求めているものほど (一見) 単純なものはありません。この質問に対する回答が重複している場合は、お詫び申し上げます。リンクをいただければ幸いです。再度、感謝します。

トレースバックは次のとおりです。

Traceback (most recent call last):
  File "/home/www/xxxxx/html/cgi-bin/hello.py", line 14, in &lt;module&gt;
    adj_user = form['user'] +  "1"
  File "/usr/lib/python2.5/cgi.py", line 567, in __getitem__
    raise KeyError, key
KeyError: 'user'

ここに「index.html」があります

<!DOCTYPE html>
<html>
    <head>
    <title>Report</title>
    <script type='text/javascript' src='test.js'></script>
    </head>
    <body>
    <form method="post" action=""> 

    <p>Please enter your name here:
    <input type="text" name="user">

    <input type="submit" name="submit" value="Submit" onClick="return hello(this.form.user.value);">
    </p>

    </form>
    </body>
</html>

これは「test.js」ファイルです。

function hello(user) {
    // Mozilla version
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    }
// IE version
    else if (window.ActiveXObject) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //user=encodeURIComponent(user);
    xhr.open("POST", "../cgi-bin/hello.py");
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    xhr.send(user);

    xhr.onreadystatechange=function() {
        if (xhr.readyState===4) {
            adj_user = xhr.responseText;
            alert ("Hello " + adj_user);
        }
    }
    return false;
}

そして最後に、サーバーの cgi-bin の「hello.py」

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import cgi
form = cgi.FieldStorage()

# enable debugging
import cgitb
cgitb.enable()

print "Content-Type: text/html;charset=utf-8"
print

adj_user = form['user'] +  "1"
print adj_user

編集

多少の進歩はありましたが、まだ私が望んでいるものではありません。次のブロックを次のように変更しました。

    xhr.open("GET", "../cgi-bin/hello.py?user=" + user, true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    xhr.send();

POST から GET への変更と接尾辞 ' "?user=" + user '、および send() メソッドの 'user' 引数の削除に注意してください。

今、これは私が望むことですが、そのように「ある」べきではありません。これを古典的な方法で機能させる方法が必要です...

いつものように、試みや提案は大歓迎です。他に何を試すべきか本当にわかりません。ありがとうございます。

4

1 に答える 1