2015-06-09 91 views
0

我是JavaScript新手,但沒有編程。我正在嘗試編寫一個與服務器交換信息的程序。我無法實現它,甚至簡化和借用其他人的代碼也無濟於事。我做錯了什麼?從服務器獲取json並將其分配給變量

下面是客戶端:

<!DOCTYPE html> 
<html> 

<head> 
    <title>Testing</title> 
</head> 

<body> 
    <script> 
     GET_JSON = function(callback) { 
      var req = new XMLHttpRequest(); 
      req.open(POST, "http://www.skutan.com/cgi-bin/hvserver.cgi", true); 
      req.onreadystatechange = function() { 
       if (this.readyState == 4) { 
        callback(JSON.parse(req.responseText)); 
       } 
      } 
      req.send("a=2&b=1"); 
     } 

     JSONCallback = function(JSONObj) { 
      alert(JSONObj); 
     }; 
    </script> 

    <button type="button" onclick="GET_JSON(JSONCallback)">Test</button> 

    <h1>.</h1> 
    <span id="koord"></span> 
</body> 

</html> 

的服務器是在Perl威騰看起來是這樣的:

#!/usr/bin/perl -wT                
use strict; 
use CGI qw(:standard); 

my @fields = param; 

my $json_ut = "{\"a\": 1, \"b\": 2}"; 

print("Content-type: application/json; charset=utf-8\n\n"); 

print("$json_ut"); 

爲什麼我沒有拿到在客戶端的任何警報?

+4

你有解釋問題是什麼。 *「我無法工作」*不是問題描述。請求是否發送?服務器是否返回響應?是否調用了'onreadystatechange'回調?你能解析迴應嗎?回調是否被調用?你必須自己調試一下。 –

+0

非常感謝您的回答。我現在看到我從未檢查請求是否已發送。服務器文件沒有在/ var/log/httpd/access_log中提到,所以我猜這個請求從未被髮送過。爲什麼會這樣? – user3397176

+1

@ user3397176 - 打開控制檯(大多數瀏覽器上的F12) - 單擊按鈕時查找錯誤。另外,控制檯的「網絡」選項卡顯示網絡請求,驗證您的信息是否正在發送。 – tymeJV

回答

0

如果選中在瀏覽器的控制檯,你會看到一個錯誤,如

ReferenceError: POST is not defined 

與該行

req.open(POST, "http://www.skutan.com/cgi-bin/hvserver.cgi", true); 

參考它應該是

req.open("POST", "http://www.skutan.com/cgi-bin/hvserver.cgi", true); 
+0

謝謝。它確實符合你的建議修改。 – user3397176

相關問題