2015-11-25 56 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