AJAX与Python:Python脚本的响应文本是对象
编辑了一个愚蠢的错误
我正在使用AJAX来访问一个Python脚本,从这个脚本中获取一些文本,并在我的网页上显示出来。
我的问题:是返回的文本是“undefined”,而我希望得到的是“bbbb”。
我有点困惑,不知道哪里出错了?是我的Python脚本有问题(没有正确处理AJAX请求),还是我的JavaScript有问题,或者是我自己搭建的WSGI服务器有问题?
HTML和JavaScript代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
function post( dest, params )
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
return xmlhttp.responseText;
}
}
xmlhttp.open("POST",dest,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send( params );
}
function onTest()
{
var response = post( "cgi/aaa.py", "email=blah" );
var output = document.getElementById( "bb" );
output.innerHTML = response;
alert( response );
}
-->
</script>
</head>
<body>
<p id="bb"> abcdef </p>
<a href="javascript:onTest()">Click it</a>
</body>
</html>
我的Python脚本:
import cgitb; cgitb.enable()
import cgi
import os
input_data = cgi.FieldStorage()
print "bbbb"
#print "you said: " + input_data['email']
3 个回答
0
问题是这样的:
var output = document.getElementById( "bb" );
...
alert( output );
...
<p id="bb"> abcdef </p>
变量 output 指向一个 ID 为 "bb" 的 DOM 元素,这个元素是一个 HTML 段落标签。
我想你可能是想打印 response
的内容。
0
也许你应该在这个函数里用 response
,而不是 output
。因为 output
是指向一个 ID 为 bb
的元素,所以 innerHTML
实际上是被正确设置的:
function onTest()
{
var response = post( "cgi/aaa.py", "email=blah" );
var output = document.getElementById( "bb" );
output.innerHTML = response;
alert( response );
}
1
你看到的undefined是因为你刚发送了请求,但没有等到响应回来。你的alert
调用应该放在状态变化的地方,也就是现在你有return xmlhttp.responseText;
的地方。记住,JavaScript的函数(除了alert
这个例外)不会阻塞,也就是说它们不会停下来等结果出来。