如何通过AJAX将JavaScript数组传递给Perl脚本?

时间:2014-02-14 21:58:27

标签: javascript ajax arrays perl

如何从通过AJAX传递的JavaScript数组创建Perl数组?

Perl访问:

@searchType = $cgi->param('searchType');
print @searchType[0];

输出:

employee,admin,users,accounts

似乎Perl数组将第一个值(@searchType[0])设置为所有传递的JavaScript数组对象的字符串。

2 个答案:

答案 0 :(得分:3)

这是一个老问题,所以我不确定这对你是否仍然有意思,但也许其他人也对这个问题感兴趣。

正如上面的评论中已经提到的,通过ajax将javascript数组传递给Perl的一种方法是首先将此数组转换为JSON对象 - 使用" JSON.stringify(jsArray);" - 然后在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 jsArray = ["employee", "admin", "users", "accounts"];
                    var jsArrayJson = JSON.stringify(jsArray);
                    $.ajax({
                            type: 'POST',
                            url: '/cgi-bin/ajax/stackCGI/processJsArray.pl', //change the path
                            data: { 'searchType': jsArrayJson},
                            success: function(res) {alert(res);},
                            error: function() {alert("did not work");}
                    });
                })

            })

        </script>
    </head>
    <body>
       <button id="test" >Push</button>

    </body>
</html>

processJsArray.pl

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use JSON;

my $q = CGI->new;

my @myJsArray = @{decode_json($q->param('searchType'))}; #read the json object in as an array

print $q->header('text/plain;charset=UTF-8'); 
print "first item:"."\n";
print $myJsArray[0]."\n";

答案 1 :(得分:1)

您需要以key=value&key=other-value

的形式表达
var searchType = ["employee", "admin", "users", "accounts"];
var keyName = "searchType";
for (var i = 0; i < searchType.length; i++) {
    searchType[i] = encodeURIComponent(keyName) + "=" + encodeURIComponent(searchType[i]);
}
var queryString = searchType.join("&");

然后您将queryString用作URL的一部分或正常发布数据。