当前位置 : 主页 > 网页制作 > JQuery >

使用jQuery的Python JSON RPC – ServiceRequestNotTranslatable

来源:互联网 收集:自由互联 发布时间:2021-06-15
我正在编写一个使用 python JSON-RPC实现的Web应用程序 – 服务器端的 http://json-rpc.org/wiki/python-json-rpc和客户端的jQuery axaj API. 这是我在python中的第一个JSON服务实现,所以我复制了上面提到的
我正在编写一个使用 python JSON-RPC实现的Web应用程序 – 服务器端的 http://json-rpc.org/wiki/python-json-rpc和客户端的jQuery axaj API.
这是我在python中的第一个JSON服务实现,所以我复制了上面提到的站点的例子(在Apache 2.2上运行CGI):

#!/usr/bin/env python

from jsonrpc import handleCGI, ServiceMethod

@ServiceMethod
def echo(msg):
    return msg


if __name__ == "__main__":
    handleCGI()

使用提供的python ServiceProxy类作为客户端(在控制台中)一切正常:

from jsonrpc import ServiceProxy
s = ServiceProxy("http://localhost:8080/mypage/bin/controller.py")
print s.echo("hello")

但是当我尝试在firebug控制台中使用jQuery进行ajax调用时(在我的页面上下文中):

var jqxhr = $.getJSON("bin/controller.py", {"params": ["hello"], "method": "echo", "id": 1}, function(data) { alert('success!'); });

我经常收到这个错误:

{"error":{"message":"","name":"ServiceRequestNotTranslatable"},"result":null,"id":""}

我究竟做错了什么?

这是如何在jQuery中进行JSON RPC调用:

$.ajax({url: "bin/controller.py",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify({"jsonrpc": "2.0",
        "method": "echo", "params": ["hello",], "id": 1,
    }),
    dataType: "json",
    success: function(response) {
        alert(response.result);
    },
});

需要是HTTP POST方法,以便我们可以发送数据.

数据实际上需要是JSON编码中的字符串.如果你传递一个对象,jQuery.ajax将对它进行URL编码,就像它对表单帖子一样(即“method = echo& params = …”).因此,使用JSON.stringify对其进行序列化,并将contentType设置为“application / json”,以表示我们正在发送JSON而不是“application / x-form-urlencoded”.

设置dataType:“json”只是告诉jQuery反序列化返回的数据(当然也是JSON格式),因此我们可以将它作为对象访问.

网友评论