#javascript #python #ajax
#javascript #python #ajax
Вопрос:
У меня есть html-файл со следующими строками кода
<script>
function ButClick(){
$.ajax({
url: "../cgi-bin/test.py",
type: "POST",
data: {var1: 'Value 1', var2: 'Value 2'},
success: function(response){$("#TestDiv").html(response);}
})
}
</script>
<form><input type='button' onclick="ButClick()" value="Click Me!" /></form>
<div id='TestDiv'></div>
и у меня есть скрипт Python 3.4 в test.py:
#![...]/custom/bin/python
# -*- coding: iso-8859-15 -*-
import cgi
import cgitb
cgitb.enable()
data=cgi.FieldStorage()
print("Var1-Data lautet: " data['var1'].value)
Я просто хочу выполнить запрос ajax при нажатии кнопки. Но я получаю следующую ошибку:
Traceback (most recent call last):
File "test.py", line 12, in amp;lt;moduleamp;gt;
print("Var1-Data lautet: " data['var1'].value)
File "[...]/custom/lib/python3.4/cgi.py", line 598, in __getitem__ raise KeyError(key)
KeyError: 'var1'
Может кто-нибудь, пожалуйста, помочь мне найти ошибку?
Комментарии:
1. Вы пытались выполнить сброс
data
на консоль в python?2. Я не так часто использовал python, но я думаю, что если вы измените
data['var1'].value
data.getvalue('var1')
его, все будет в порядке3. @GovindSinghNagarkoti javascript будет принимать имена, не заключенные в кавычки, в формате json, если они являются допустимыми идентификаторами js
4. @ThinkDifferent Его код выглядит как пример в начале docs.python.org/2/library/cgi.html
5. @ThinkDifferent извините, это тоже не сработает…
Ответ №1:
теперь я нашел решение своей проблемы. Там я использую не CGI, а PHP и Pyton. Конечно, это решение не очень элегантное, но оно делает то, что я хочу. Кроме того, я должен выполнить некоторые запросы MySQL. В целом, я могу, кстати, увеличить производительность всей страницы.
Теперь мой код выглядит так:
index.html
<html>
<head>
<title>TEST</title>
<script src="jquery.js"> </script>
</head>
<body>
<script>
function ButClick(){
var TestVar = "'Hallo! This is a test'";
$.post('test.php',{var:TestVar},function(response) $('#TestDiv').html(response)});
}
</script>
<form><input type='button' onclick="ButClick()" value="Click Me!" /></form>
<div id='TestDiv'></div> </body>
</body>
</html>
test.php
<?php
$param1=$_POST['var'];
$command="python test.py $param1 $param2";
$buffer='';
ob_start(); // prevent outputting till you are done
passthru($command);
$buffer=ob_get_contents();
ob_end_clean();
echo "PHP and".$buffer;
?>
test.py
#path to your python interpreter
#!/usr/bin/python
#sys module to get access to the passed in parameters
import sys
# the first parameters in sys.argv[0] is the path to the current executing python script
param1=sys.argv[1]
PyAnswer="python back: " param1
# send the result back to php
print (PyAnswer)
Я надеюсь, что смогу помочь с этим сообщением некоторым другим людям!