javascript - 我需要进行 Ajax 调用并显示数据库表的内容,我正在使用 Perl CGI 并尝试通过 javaScript 调用 Perl 脚本

标签 javascript jquery ajax perl cgi

由于某种原因,Web 控制台在 document.ready 函数中给出了错误。它说未捕获的语法错误未识别的标识符

这是我的cgi脚本,其中的JS调用perl脚本TestAj.pl,它返回一个json,我试图通过使用alert函数来显示perl输出,在javascript函数getAppointments()中获取该数据。但我在警报中没有收到任何信息。

我是 perl cgi 和 ajax 的新手,所以如果我做了一些愚蠢的事情,请告诉我。仅供引用,我已经在本地计算机上测试了 perl 脚本,它为我提供了所需的输出。 这是我的 cgi 脚本,其中包含 js 和 html

#!"c:\xampp\perl\bin\perl.exe"
use strict;
use CGI;


my $query = new CGI;


print $query->header( "text/html" );

print <<END_HERE;
<html>
  <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
    <script type="text/javascript">
$(document).ready(function () {
     getAppointments();
 });
function getAppointments(){
$.ajax({
        type: "GET",
        url: "/cgi-bin/TestAj.pl", // URL of the Perl script
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){
        alert(data);
        }, // success
        error: function() {alert("did not work");}
      });
}
    </script>
    <title>My First CGI Script</title>

  </head>
  <body bgcolor="#FFFFCC">
    <input type="button" value="New" onclick="showDiv()" />
<div id="hideShow" style="display:none;">
<form id="new app" method="POST" action="/cgi-bin/testing.cgi">
<input type="text" name="Date">Date<br>
<input type="text" name="Time">Time<br>
<input type="text" name="Description">Description<br>
<input type="submit" value="Add">
<input type="button" value="Cancel" onclick="hideDiv()" />
</form>
</div>

<p>       </p>
<p>       </p>
<p>       </p>
<form id="search" action="">
<table>
<tr>
<td>
<input type="text" name="searchApp"><br>
</td>
<td>
<input type="submit" value="Search"><form>
</td>


<script type="text/javascript">

    function showDiv() {
   document.getElementById('hideShow').style.display = "block";
}
    function hideDiv() {
   document.getElementById('hideShow').style.display = "none";
}




</script>

</body>
</html>
END_HERE

perl脚本TestAj.pl如下:

#!"c:\xampp\perl\bin\perl.exe"
use strict;
use warnings;
use JSON; 
use DBI;
use CGI;
our @query_output;
our $row="";
our $dbh="";
our $sth="";
our $dbfile = "";
$dbfile = "sample.db";
our $dsn      = "dbi:SQLite:dbname=$dbfile";
our $cgi = CGI->new;
our $user     = "";
our $password = "";
#print "Content-type: application/json; charset=iso-8859-1\n\n";

$dbh = DBI->connect($dsn, $user, $password, {
   PrintError       => 0,
   RaiseError       => 1,
   AutoCommit       => 1,
   FetchHashKeyName => 'NAME_lc',
});

$sth = $dbh->prepare("SELECT * FROM appointment");
$sth->execute() or die $DBI::errstr;
while ( my $row = $sth->fetchrow_hashref ){
push @query_output, $row;
}
   #my ($id,$Date,$Time,$Description) = @row;
   #my $json={{"id":"$id","Date":"$Date","Time":"$Time","Description":"$Description"}}
   # return JSON string
    #print @query_output;
    print $cgi->header(-type => "application/json", -charset => "utf-8");
    print JSON::to_json(\@query_output);

    #print $json;

谢谢

最佳答案

你的问题出在线上

print <<END_HERE;

因为这将插入代码中的任何 perl 变量。由于您可能不想这样做,因此您要么必须转义每个符号($,%,@),要么只需将此行更改为:

print <<'END_HERE';

HTH 格奥尔格

关于javascript - 我需要进行 Ajax 调用并显示数据库表的内容,我正在使用 Perl CGI 并尝试通过 javaScript 调用 Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367052/

相关文章:

javascript - Grails AJAX标签

javascript - 单击模态窗口外部时重置 Bootstrap 模态

java - Java 到 NodeJS 的通信?

javascript - 如何将值推送到 Angular 中的嵌套对象?

php - xml 到 json 到 JavaScript

javascript - 播放音频时更改图片(jQuery、HTML5)

jquery - jQuery.inArray 损坏了吗?

javascript - jQuery:页面代码和document.ready代码之间的共享功能

javascript - 无法访问 JSON 对象的值

javascript - 同一域上的访问控制允许来源问题