我正在编写一个使用 python JSON-RPC实现的Web应用程序 – 服务器端的 http://json-rpc.org/wiki/python-json-rpc和客户端的jQuery axaj API. 这是我在python中的第一个JSON服务实现,所以我复制了上面提到的
这是我在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格式),因此我们可以将它作为对象访问.
