4

ajax 経由で Perl スクリプトにデータを送信し、そこから json 形式を受信したいと考えています。しかし、うまくいきません。次のスクリプトに問題があることはわかっています。誰もそれを修正する方法を知っていますか?

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;
4

2 に答える 2

9

今までに解決したかどうかはわかりませんが、他の誰かがこの質問につまずいて、それがどのように機能するのか疑問に思っているかもしれません.

以下のコードを見つけてください。このコードを実行したい場合は、index.html ファイルを html ディレクトリ (例: /var/www/html) にコピーし、perl スクリプトを cgi-bin ディレクトリ (例: /var/www/cgi-bin) にコピーします。必ず perl スクリプトを実行可能にしてください! 以下の私のコードでは、cgi ディレクトリは /cgi-bin/ajax/stackCGI にあります - それに応じて変更してください。

また、Perl cgi、AJAX、JSON の使用方法に関する少し高度な例: clickと、JSON を使用して AJAX 経由で Javascript から Perl に配列を渡す方法に関するもう 1 つの例: clickも追加しました。

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;
于 2015-03-11T17:09:21.630 に答える
1

ヘッダーを印刷するのを忘れたと思います:

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

する必要があります

print $cgi->header(-type => "application/json", -charset => "utf-8");
于 2015-03-12T11:28:07.900 に答える