2015-11-25 55 views
0

从浏览器将数据发送到一个Python CGI脚本处理我有以下使用纯JavaScript

<!doctype html> 
<html lang="en"> 
    <meta charset="utf-8"> 
    <body> 
     <script type="text/javascript"> 
     var httprequest=new XMLHttpRequest(); 
     httprequest.open("POST","hello.cgi",true); 
     httprequest.onload=function(){ 
     if(httprequest.status==200){ 
      alert(""); 
     }// end of if 
     }//end of onload 
     var content={"hello":"world"}; 
     httprequest.send(JSON.stringify(content)); 
     alert(httprequest.responseText) 
      </script 
    </body> 
</html> 
</doctype> 

在这种情况下,我尝试发送数据{“你好”的HTML测试文件:”世界”};为Python CGI脚本

这是我的Python脚本与从<form> html标记

#!/usr/bin/python 
try: 
    import sys 
    import cgi 
    import traceback 
    print("Content-type: text/html\n\n") 
    print "<h1>YES</h1>" 
    formData = cgi.FieldStorage() 
    print(formData) 
    print(s) 
except Exception as e: 
    print(e.message) 
    print(traceback.print_exc()) 

提交的数据。当我发送数据{"hello":"world"}效果很好,我的浏览器提示框显示没有返回的数据来自cgi脚本。

正如cgi脚本中所反映的,我试图打印“YES”并打印从javascript发送的数据。

我发现与使用$.ajax这样做有几个问题,但整个使用XMLHttpRequest()

问题

我怎样才能将数据发送到一个Python CGI脚本的方法还没有来从我的浏览器使用纯JavaScript处理(无jquery)

+0

你的'alert()'发生在HTTP请求完成之前。这是一个**异步**操作。 – Pointy

+0

好吧..我试试这个,看看这是如何工作的...我相对较新的JS – repzero

+0

@ Pointy ..我移动了“alert(httprequest.responseText)”,并将其放在onload函数中,这可以工作.can你发布了一个答案,并详细阐述了与上述代码有关的异步操作..非常感谢.....我不确定我是否理解为什么它不起作用的原因 – repzero

回答

1

您执行的HTTP请求发生在它自己的时间。拨打电话httprequest.send()开始的操作,但该函数调用几乎立即返回,并且肯定在远程服务器响应之前。这种异步的行为是JavaScript环境中生活的基本事实。

“onload”回调的全部原因是为了让您可以编写在HTTP请求实际完成时发生的代码。当结果变为可用时,浏览器将调用结果的函数。这可能在100毫秒或10秒内;这一切都取决于服务器和网络。

+0

我看到...这非常有用,尤其是答案的强调部分....:D – repzero

+0

还有一个问题。 .my输出打印,但页面显示它正在连续加载....任何建议? – repzero

+0

@repzero加载指标可能难以控制;我不知道它可能会“困惑”的所有方式。这可能是因为它有一些无关的资源,它正在等待。 “网络”浏览器调试选项卡可能会帮助您弄清楚。 – Pointy