0
正在調用Perl CGI腳本;我可以看到調試日誌獲取參數並執行。在ajax調用過程中獲取狀態碼0跨站點Perl CGI函數
問題是返回結果,狀態碼始終爲0,responseText爲空。
已經嘗試過各種標題選項等,沒有運氣,任何幫助將不勝感激。
的Perl CGI處理程序
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use JSON;
use Data::Dumper qw(Dumper);
my $q = new CGI;
my %data;
open my $FH, '>', 'outfile';
if (my $number = $q->param('number')){
if ($number =~ /^\d+$/) {
$data{result} = $number % 2 ? 'odd' : 'even';
} else {
$data{result} = 'Not a number';
}
my $jret = to_json(\%data);
print $FH Dumper($jret);
close $FH;
print $q->header('application/json');
print to_json(\%data);
}
HTML代碼
<!DOCTYPE html>
<html>
<head>
<title>[% title %]</title>
<meta charset='utf-8'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"> </script>
</script>
</head>
<body>
<div id='result'></div>Enter number:
<form>
<input type='text' id='number'>
<button onclick='test_number();'>Test</button>
<script>
function test_number()
{
$.ajax({
type: 'POST',
dataType: 'json',
url: '/cgi-bin/simple.cgi',
data: {
'number': $('#number').val()
},
success: function(data, textStatus){
alert('request successful');
},
error: function(jqXHR, exception) {
msg = 'Request Status: ' + jqXHR.status + ' Status Text: ' + jqXHR.statusText + ' ' + jqXHR.responseText;
alert(msg);
}
});
return false;
}
</script>
</form>
</body>
</html>
請顯示更多的Perl代碼。具體來說,如果有任何其他的'print'語句超出了你所顯示的。 – simbabque
如果狀態爲'0',那麼瀏覽器的開發工具中的控制檯上通常會顯示一條有用的錯誤消息。你需要看看那裏。 – Quentin
你的Perl代碼看起來不錯。沒有什麼問題。您也可以在開發者工具中查看請求。這可能是因爲你的'POST'請求實際上並沒有提交表單,而是'data'中的JS對象被序列化爲JSON並作爲請求的主體提交,而不是轉換爲formdata。如果是這樣的話,CGI.pm不能讀取它,'$ q-> param('number')'將會是false,因此你的程序將永遠不會打印任何東西並退出。如果沒有輸出,你什麼也看不見。 – simbabque