如何從通過AJAX傳遞的JavaScript數組創建Perl數組?如何通過AJAX將JavaScript數組傳遞給Perl腳本?
Perl的訪問:
@searchType = $cgi->param('searchType');
print @searchType[0];
輸出:
employee,admin,users,accounts
看來,Perl數組設置第一值(@searchType[0]
),因爲所有通過JavaScript數組對象的字符串。
如何從通過AJAX傳遞的JavaScript數組創建Perl數組?如何通過AJAX將JavaScript數組傳遞給Perl腳本?
Perl的訪問:
@searchType = $cgi->param('searchType');
print @searchType[0];
輸出:
employee,admin,users,accounts
看來,Perl數組設置第一值(@searchType[0]
),因爲所有通過JavaScript數組對象的字符串。
您需要以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的一部分或發佈數據。
雖然將數組轉換爲字符串的方法是可行的,但它並不是最有效的方法。應該可以傳遞一個實際的數組對象。我在PHP中做了很多次,但是這個項目是在PERL中,所以我希望找到一種方法來正確地將傳入的JS數組轉換爲PERL數組。從我讀到的這是可能的,我只是不確定正確的方式去做。 – JimmyJammed
@James Hickman,Re「應該可以傳遞一個實際的數組對象。」,不可能的。只有字節可以通過套接字發送。數據結構需要序列化並在另一端重新創建。使用'application/x-www-form-urlencoded'序列化Quentin(因爲它可以與我的@searchType = $ cgi-> param('searchType')')一起工作。我會用JSON去(因爲從長遠來看它會導致更少的麻煩)。但有一點需要使用。 – ikegami
除非我處理複雜的數據結構,否則我更喜歡'application/x-www-form-urlencoded'數據,因爲它可以用表單生成,因此可以減少對JavaScript的依賴。它也會被每個服務器端表單庫自動分析,所以你不需要編寫額外的JSON解碼步驟。 – Quentin
這是一個老問題,所以我不確定這對你是否仍然有趣,但也許別人也對這個問題感興趣。如上所述,通過ajax將javascript數組傳遞給Perl的一種方法是將此數組首先轉換爲JSON對象 - 使用「JSON.stringify(jsArray);」將該數組轉換爲JSON對象。 - 然後在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";
使用JSON序列化數據。 – ThisSuitIsBlackNot
@JamesHickman:因爲ThisSuitIsBlack不建議,一個方法是使用JSON。我認爲,我在下面添加了一個工作示例,可以實現您想要的功能。請讓我知道這是否適合您,或者是否需要適應您的需求。 – Cleb