我正在嘗試讓Python,cgi模塊,ajax/javascript組合工作。由於我的服務器訪問(本質上是租用的Web空間)的本質,我不能安裝像Django或任何其他Web框架的東西。我現在堅持使用CGI。我可以調用python文件來簡單地打印出一些東西,但是一旦將參數傳遞給python文件,cgi.FieldStorage()就不會收到任何輸入。當我爲FieldStorage添加打印語句時,輸出如下:Python/CGI/Ajax:cgi.FieldStorage沒有收到參數
FieldStorage(None, None, [])
您可以在下面找到所有必需的代碼。從本質上講,我試圖做的(用於測試目的)是從文本輸入中獲取一個字符串,在其末尾添加一個「1」並將其返回。有趣的是,當我使用一個簡單的php文件來完成同樣的事情,並在其他完全相同的腳本中使用它時,腳本沒有任何問題。下面是我嘗試了典型的PHP腳本:
<?php
$user = urldecode(implode(file('php://input')));
$adj_user = $user . "1";
echo $adj_user;
?>
(請注意,我想使用Python,因爲我更舒服,我不喜歡PHP不少)
我有感覺我只是有點密集,而且它非常簡單。非常感謝任何幫助找到我做錯了什麼。提前感謝!
P.S.在我發佈這裏之前,我已經搜索了很多stackoverflow和web。有很多相關的話題,但沒有什麼比我所問的(看似)簡單。如果有這個問題的答案重複,那麼我表示歉意,並希望有一個鏈接。再次感謝。
回溯是:
Traceback (most recent call last):
File "/home/www/xxxxx/html/cgi-bin/hello.py", line 14, in <module>
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;
}
,最後「 hello.py「在我的服務器的cgi-bin中
#!/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和後綴,以及在發送清除「用戶」的說法() 方法。
現在,這是,我想要的,但它不應該「那樣」。必須有一種方法來獲得這種經典的方式...
像往常一樣,任何嘗試或建議是值得歡迎的。我真的不知道還有什麼要嘗試。謝謝你。
非常感謝您的回答!不幸的是,我不太明白你的意思,我不能讓我的代碼與你寫的東西一起工作。 (我只是用我的代碼中的行與'postData'變量減去未關閉的''等) 你可能會寫出代碼塊給我。對於ajax我還是比較新的,所以請忍受我。謝謝! – Nebelhom 2013-02-23 12:10:08
在JavaScript方面,只需用上面兩行代替發送行即可。我也發現了Python方面的問題,並且已經更新了答案。 – Quentin 2013-02-23 12:31:10
謝謝,夥計。那樣做了。它仍然沒有我希望的那麼有活力。我仍然需要爲每個傳遞的變量寫出一個「encodeURIComponent('key')+'='+ encodeURIComponent(key)」的代碼塊,如果你有3個或更多的變量,它會變得很長,但是我會標記你的答案已被接受。感謝隊友,你是明星! 一旦我可以(22小時顯然),我會給你+50給你,當然,除非有人想出一個動態的輸入密鑰的方式。 – Nebelhom 2013-02-23 13:29:42