【问题标题】:AJAX JSON RPC ERROR: [object Object]AJAX JSON RPC 错误:[对象对象]
【发布时间】:2014-04-23 17:59:39
【问题描述】:

我正在尝试使用 perl 通过 CGI 调用 JSON RPC 函数。但是出现以下错误。

错误:[对象对象

有人可以帮我解决这个问题吗?提前致谢。

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

[root@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;

【问题讨论】:

    标签: jquery ajax json perl json-rpc


    【解决方案1】:

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

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

    在任何情况下,您都会得到ERROR: [object Object],因为您试图在 XHR 对象(您已命名为 response ) 在您的.error 回调定义中:

    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-RPC 级别(相对于 HTTP 级别)错误。在您的.success 处理程序中,您应该检查response.error。如果它不为 null,则已引发 JSON-RPC 级别错误(例如 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" );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2013-08-14
      • 2017-01-02
      相关资源
      最近更新 更多