[英]Calling perl CGI with jquery $.ajax()
我正在嘗試通過jQuery的ajax調用來調用擴展名為.cgi的perl腳本,但是運氣不佳。 在命令行上,該應用程序運行良好,但是在單擊事件后在瀏覽器中使用JS調用該應用程序時,似乎沒有任何返回。
如果有人指出發生了什么問題,將不勝感激。
FYI權限設置為755。apache2處理程序設置為.cgi .pl .py .ppl和.perl,因此我知道這不是處理程序或權限問題。
.js文件
function getData() {
var data = $("#textBox").val(); // this contains a small string
$.ajax({
url:"/public_html/cgi-bin/emailSubList.cgi",
type:"GET",
data:"data="+data,
async:false,
success:function(res){
alert("result is: " + res);
}
});
}
.cgi perl腳本
#!usr/local/bin/perl
use CGI;
use DBI;
use strict;
my $in = new CGI;
my $dataIn = $in->param('data');
#this connects, but I don't need to share the login to all
my $dbh = DBI->connect("DBI:mysql:database:username:password);
my $sth;
my $result;
$sth = $dbh->prepare("SELECT id FROM dataList WHERE data=?");
$sth->execute($dataIn);
my @res = $sth->fetchrow_array();
if(@res > 0) {
$result = 'Data has already been submitted';
}
else {
$sth = $dbh->prepare("INSERT INTO dataList ($dataIn) VALUES (?)");
$sth->execute($dataIn);
$result = 'Data added!';
}
print $in->header('text/plain;charset=UTF-8');
print "$result";
更新:有一個錯誤引發,500內部服務器錯誤,但是我不明白為什么原因是權限為755,並且語法使用perl -wc script_name.cgi可以正常進行檢查,關於如何調試此或其他內容的任何想法檢查將非常有幫助。
上面的操作在網頁中帶有click事件,但是似乎沒有執行perl應用程序。 這里的目標是通過一個簡單的ajax調用將數據發送到DB並從同一DB返回它或其他。
只是注意一些我在腳本發布時可以看到的問題。 抱歉,如果這些都是復制錯誤,則從發布到堆棧溢出粘貼錯誤,而不是核心問題。
$sth = $dbh->prepare("INSERT INTO dataList ($dataIn) VALUES (?)");
應該:
$sth = $dbh->prepare("INSERT INTO dataList (data) VALUES (?)");
OP發布了一條評論,解釋該問題已解決。 由於他似乎不想發布答案來為有類似問題的其他人解釋該答案,因此我會做。
如果要將文件從Windows上傳到Unix / Linux服務器,則以ASCII模式執行此操作很重要。 這樣,所有Windows風格的行尾字符都將自動轉換為Unix風格的行尾字符。 如果您不這樣做,那么當文件到達服務器時,它將全部顯示在一行上(因為Windows樣式的行尾字符將無法識別)。
這對於使用shebang行執行的程序尤其重要(當然,Perl程序屬於該類別)。 shebang行應該包含用於執行代碼的程序的路徑。 如果那條線沒有結束,您很有可能會得到一些非常奇怪的行為。
值得補充幾點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.