AJAX& Python:python脚本中的响应文本是一个对象

时间:2011-02-28 23:48:33

标签: python ajax cgi wsgi

编辑出愚蠢的错误

我使用AJAX访问python脚本,从python脚本获取一些TEXT&将它显示在我的网页上。

我的问题:是响应文本是“未定义”,应该是这个“bbbb”

我很困惑我哪里出错了?是不是我的python脚本不正确(没有正确处理AJAX(?requests?)),是我的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 :(得分:1)

你得到了未定义,因为你只是做了帖子,并没有等待响应回来。您的alert来电应该在状态更改中,您现在有return xmlhttp.responseText;。请记住,Javascript函数(讽刺的是alert除外)不会阻塞。

答案 1 :(得分:0)

也许您应该在此功能中使用response,而不是outputoutput使用id="bb"引用该元素,因此innerHTML实际上已正确设置:

   function onTest()
    {
        var response = post( "cgi/aaa.py", "email=blah" );
        var output   = document.getElementById( "bb" );

        output.innerHTML = response;
        alert( response );
    }

答案 2 :(得分:0)

问题在于:

var output   = document.getElementById( "bb" );
...
alert( output );
...
<p id="bb"> abcdef </p>

变量输出指向id为“bb”的DOM元素,这是一个HTML段落标记。

我想你可能想打印response