AJAX与Python:Python脚本的响应文本是对象

0 投票
3 回答
4336 浏览
提问于 2025-04-16 12:42

编辑了一个愚蠢的错误

我正在使用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这个例外)不会阻塞,也就是说它们不会停下来等结果出来。

撰写回答