首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:[对象对象]

错误:[对象对象]
EN

Stack Overflow用户
提问于 2014-03-18 07:29:21
回答 1查看 1.8K关注 0票数 1

我试图使用perl通过CGI调用JSON函数。但是得到以下错误。

错误:[对象对象

有人能帮我一下吗?提前谢谢。

Test.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
use JSON::RPC::Server::CGI;
use strict;

my $server = JSON::RPC::Server::CGI->new;

$server->dispatch('MyApp')->handle();

MyApp.pm

代码语言:javascript
复制
[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;
EN

回答 1

Stack Overflow用户

发布于 2014-04-09 13:00:09

您将得到由Internal Server Error返回的server.cgi (纯文本,而不是JSON)。我们看不到消息(您没有发布任何日志),因此您需要检查您的web服务器日志以找出服务器端的错误是什么。

原因之一可能是您没有安装合理版本的JSON::RPC

在任何情况下,您都会得到ERROR: [object Object],因为您试图在XHR对象(您已经命名为response)的.error回调定义中调用XHR对象(通过执行"..."+response隐式地调用):

代码语言:javascript
复制
error: function(response){
  $("body").append( "ERROR: " + response );
  $("body").append( "<br>" );
}

.error的方法签名是function error(jqXHR, textStatus, errorThrown)。您可能希望将其更改为:

代码语言:javascript
复制
error: function(xhr, status, error){
  $("body").append( "ERROR: " + error );
  $("body").append( "<br>" );
}

此外,您没有处理JSON级别(与HTTP级别相反)错误。在.success处理程序中,您应该检查response.error。如果这是非空的,那么JSON级别的错误(比如在一个MyApp子类中的一个异常)就会被抛出。

你可以这样处理:

代码语言:javascript
复制
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" );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22472857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档