2013-10-06 68 views
4

我想通過ajax發送數據到Perl腳本,並從它接收一個json格式。但它不起作用。我知道在下面的腳本中有什麼錯誤。有誰知道如何修理它?如何通過ajax發送數據到Perl腳本?

jQuery代碼:

$("#test").click(function(){ 
    var ID = 100; 
    var data = { 
     data_id : ID                   
    }; 

    $.ajax({   
     type: "POST", 
     url: "ajax.cgi", 
     data: data, 
     success: function(msg){ 
      window.alert(msg); 
     }  
    }); 
}); 

ajax.cgi(perl腳本):

#!/usr/bin/perl 

use CGI; 
use DBI; 

$cgi = CGI->new; 

# Here I'd like to receive data from jQuery via ajax. 
$id = $cgi->param('data_id');  
$json = qq{{"ID" : "$id"}}; 

$cgi->header(-type => "application/json", -charset => "utf-8"); 
print $json; 

exit; 
+2

檢查服務器訪問和錯誤日​​志文件 –

+0

非常感謝您的評論。那麼,它的意思是「$ cgi = CGI-> new; $ id = $ cgi-> param('data_id');」爲了在jQuery中通過ajax接收數據沒有錯? –

+6

**(1)**請讓你的Perl腳本在'use strict;使用警告'→聲明你的變量。 **(2)**就我所見,實際上並沒有「打印」$ cgi->頭(...)'。 **(3)**要查看腳本收到的內容,請將參數轉儲到日誌文件中:'use Data :: Dumper;打印STDERR Dumper $ cgi-> Vars'。 **(4)**要對JSON進行解碼或編碼,請使用「JSON」模塊。 – amon

回答

7

不知道你是否現在解決了這個問題,但在這個問題上也許別人絆倒奇事,它是如何工作。

請在下面找到該代碼。如果你想運行這個代碼,只需將index.html文件複製到你的html目錄(例如/ var/www/html),並將perl腳本複製到你的cgi-bin目錄(例如/ var/www/cgi-bin)。確保使perl腳本可執行!在我的代碼中,cgi目錄位於/ cgi-bin/ajax/stackCGI中 - 請相應地更改它。

我還添加關於如何使用Perl CGI,AJAX和JSON稍微更高級的例子:clickclick和關於如何從Javascript傳遞數組還一個例子使用JSON經由AJAX來的Perl。

的index.html

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Testing ajax</title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 


    <script> 

      $(document).ready(function() { 

       $("#test").click(function(){ 
        var ID = 100; 
        $.ajax({ 
          type: 'POST', 
          url: '/cgi-bin/ajax/stackCGI/ajax.pl', 
          data: { 'data_id': ID }, 
          success: function(res) { 

                 alert("your ID is: " + res.result); 

                }, 
          error: function() {alert("did not work");} 
        }); 
       }) 

      }) 



     </script> 
    </head> 
    <body> 

     <button id="test" >Testing</button> 

    </body> 
</html> 

ajax.pl

#!/usr/bin/perl 

use strict; 
use warnings; 

use JSON; #if not already installed, just run "cpan JSON" 
use CGI; 

my $cgi = CGI->new; 

print $cgi->header('application/json;charset=UTF-8'); 

my $id = $cgi->param('data_id');  

#convert data to JSON 
my $op = JSON -> new -> utf8 -> pretty(1); 
my $json = $op -> encode({ 
    result => $id 
}); 
print $json; 
1

我想,你忘了打印頭:

$cgi->header(-type => "application/json", -charset => "utf-8"); 

應該

print $cgi->header(-type => "application/json", -charset => "utf-8"); 
相關問題