簡體   English   中英

用jquery $ .ajax()調用perl CGI

[英]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返回它或其他。

只是注意一些我在腳本發布時可以看到的問題。 抱歉,如果這些都是復制錯誤,則從發布到堆棧溢出粘貼錯誤,而不是核心問題。

  1. 數據庫連接字符串缺少右引號。

  1. 插入語句看起來不正確

$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行應該包含用於執行代碼的程序的路徑。 如果那條線沒有結束,您很有可能會得到一些非常奇怪的行為。

值得補充幾點:

  • 這個問題幾乎肯定會在Web服務器錯誤日志中留下有用的消息。
  • 這是一個很好的理由,因此值得在將用於部署的同一平台上進行開發。 有了適用於所有平台(包括Windows)的免費的良好虛擬機環境,您就沒有理由不能在Windows計算機上的Linux中進行開發了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM