Я хочу отправить данные в Perl script через ajax и получить от него формат 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 script):
#!/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;
Не уверен, решили ли вы его сейчас, но, возможно, кто-то еще спотыкается над этим вопросом и задается вопросом, как это работает.
Пожалуйста, найдите код ниже. Если вы хотите запустить этот код, просто скопируйте файл index.html в каталог html (например,/var/www/html) и perl script в каталог cgi-bin (например,/var/www/cgi-bin). Обязательно сделайте исполняемый файл perl script! В моем коде ниже каталог cgi находится в /cgi -bin/ajax/stackCGI - пожалуйста, измените его соответствующим образом.
Я также добавил несколько более подробный пример того, как использовать Perl cgi, AJAX и JSON: click, а также еще один пример того, как передать массив из Javascript к Perl через AJAX с помощью JSON: нажмите.
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;
Я думаю, вы забыли напечатать заголовок:
$cgi->header(-type => "application/json", -charset => "utf-8");
должен быть
print $cgi->header(-type => "application/json", -charset => "utf-8");
На самом деле это не ответ, а просто вопрос, связанный с одним из ответов.
Я новичок в Perl, и я просто скопировал ответ Cleb (а также сделал исполняемый файл ajax.pl), но он не работает и выдает эту ошибку:
XML Parsing Error: not well-formed
Location: file:///home/ali/workspace/snmp-agent/query_ui/ajax.pl
Line Number 1, Column 2:
Как видно из ответа Cleb, первая строка - "#!/Usr/bin/perl". Может кто-нибудь подсказать, пожалуйста, как решить эту проблему?