我试图使用perl通过CGI调用JSON函数。但是得到以下错误。
错误:[对象对象
有人能帮我一下吗?提前谢谢。
Test.html
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function() {
$.ajax({
type: "POST",
url: "cgi-bin/server.cgi",
data: '{"version": "1.1", "method": "echo", "params" : ["Hello World"]}',
processData: false,
async: false,
timeout: 30000, // msec
contentType: "application/json",
dataType: "json",
success: function(response){
$("body").append( "<br>SUCCESS: " + response.version );
$("body").append( "<br>version: " + response.version );
$("body").append( "<br>result: " + response.result );
$("body").append( "<br>OK" );
},
error: function(response){
$("body").append( "ERROR: " + response );
$("body").append( "<br>" );
}
});
});
</script>
</head>
<body>
</body>
</html>server.cgi
根@ip-172-31-0-164 cgi-bin# cat server.cgi #!/usr/bin/perl
use JSON::RPC::Server::CGI;
use strict;
my $server = JSON::RPC::Server::CGI->new;
$server->dispatch('MyApp')->handle();MyApp.pm
[root@ip-172-31-0-164 cgi-bin]# cat MyApp.pm
#!/usr/bin/perl
package MyApp;
use base qw(JSON::RPC::Procedure); # Perl 5.6 or more than
use strict;
sub echo : Public { # new version style. called by clients
# first argument is JSON::RPC::Server object.
return $_[1];
}
sub sum : Public(a:num, b:num) { # sets value into object member a, b.
my ($s, $obj) = @_;
# return a scalar value or a hashref or an arryaref.
return $obj->{a} + $obj->{b};
}
1;发布于 2014-04-09 13:00:09
您将得到由Internal Server Error返回的server.cgi (纯文本,而不是JSON)。我们看不到消息(您没有发布任何日志),因此您需要检查您的web服务器日志以找出服务器端的错误是什么。
原因之一可能是您没有安装合理版本的JSON::RPC。
在任何情况下,您都会得到ERROR: [object Object],因为您试图在XHR对象(您已经命名为response)的.error回调定义中调用XHR对象(通过执行"..."+response隐式地调用):
error: function(response){
$("body").append( "ERROR: " + response );
$("body").append( "<br>" );
}.error的方法签名是function error(jqXHR, textStatus, errorThrown)。您可能希望将其更改为:
error: function(xhr, status, error){
$("body").append( "ERROR: " + error );
$("body").append( "<br>" );
}此外,您没有处理JSON级别(与HTTP级别相反)错误。在.success处理程序中,您应该检查response.error。如果这是非空的,那么JSON级别的错误(比如在一个MyApp子类中的一个异常)就会被抛出。
你可以这样处理:
success: function(response){
if (response.error) {
$("body").append( "<br>ERROR! " );
$("body").append( "<br>version: " + response.version );
$("body").append( "<br>message: " + response.error.message );
$("body").append( "<br>code: " + response.error.code );
$("body").append( "<br>FAIL" );
} else {
$("body").append( "<br>SUCCESS!");
$("body").append( "<br>version: " + response.version );
$("body").append( "<br>result: " + response.result );
$("body").append( "<br>OK" );
}
}https://stackoverflow.com/questions/22472857
复制相似问题