Javascript 在跨站点Perl CGI函数的ajax调用中获取状态代码0
正在调用Perl CGI脚本;我可以看到调试日志获取参数并执行 问题是返回结果,状态代码始终为0,responseText为空 尝试了各种头球选项等,没有运气,任何帮助将不胜感激 Perl CGI处理程序 HTML代码Javascript 在跨站点Perl CGI函数的ajax调用中获取状态代码0,javascript,ajax,perl,Javascript,Ajax,Perl,正在调用Perl CGI脚本;我可以看到调试日志获取参数并执行 问题是返回结果,状态代码始终为0,responseText为空 尝试了各种头球选项等,没有运气,任何帮助将不胜感激 Perl CGI处理程序 HTML代码 [%title%] 输入号码: 试验 功能测试_编号() { $.ajax({ 键入:“POST”, 数据类型:“json”, url:“/cgi-bin/simple.cgi”, 数据:{ ‘number’:$(‘number’).val() }, 成功:功能(数据、文本状态
[%title%]
输入号码:
试验
功能测试_编号()
{
$.ajax({
键入:“POST”,
数据类型:“json”,
url:“/cgi-bin/simple.cgi”,
数据:{
‘number’:$(‘number’).val()
},
成功:功能(数据、文本状态){
警报(“请求成功”);
},
错误:函数(jqXHR,异常){
msg='请求状态:'+jqXHR.Status+'状态文本:'+jqXHR.statusText+'+jqXHR.responseText;
警报(msg);
}
});
返回false;
}
单击表单中的提交按钮时运行JavaScript函数
这:
快攻 对按钮元素使用
type=“button”
,使其不是提交按钮
适当的解决方案
请显示更多Perl代码。特别是如果在您显示的语句上方有任何其他打印
语句。如果状态为0
,则通常会在浏览器的开发人员工具的控制台上显示有用的错误消息。你需要看看那里,你的Perl代码看起来不错。这没什么问题。在开发人员工具中查看请求。可能是您的POST
请求实际上没有提交表单,而是data
中的JS对象被序列化为JSON并作为请求主体提交,而不是转换为formdata。如果是这种情况,CGI.pm无法读取它,并且$q->param('number')
将为false,因此您的程序将永远不会打印任何内容,只需退出即可。如果没有输出,你就什么都看不见。那HTML代码是否足以构成一个?如果有一个
元素,那么这将产生显著的差异。@simbabque-数据
没有JSON数据结构。只是一个普通的JS。jQuery将使用标准格式数据编码对其进行序列化。
#!/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);
}
<!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>
function test_number(event) {
event.preventDefault();
$.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);
}
});
}
document.querySelector("form").addEventListener("submit", test_number);