使用 jQuery 的 Python JSON RPC - ServiceRequestNotTranslatable
我正在使用 python JSON-RPC 实现编写一个 Web 应用程序 - http://json-rpc .org/wiki/python-json-rpc 在服务器端,jQuery axaj API 在客户端。 这是我在 python 中的第一个 JSON 服务实现,因此我从提到的站点复制了示例(CGI 在 Apache 2.2 上运行):
#!/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":""}
我做错了什么?
I'm writing a web application using python JSON-RPC implementation - http://json-rpc.org/wiki/python-json-rpc on server side and jQuery axaj API on client side.
This is my first JSON service implementation in python, so I've copied the example from mentioned site (CGI run on Apache 2.2):
#!/usr/bin/env python
from jsonrpc import handleCGI, ServiceMethod
@ServiceMethod
def echo(msg):
return msg
if __name__ == "__main__":
handleCGI()
Everything works fine with supplied python ServiceProxy class as a client (in console):
from jsonrpc import ServiceProxy
s = ServiceProxy("http://localhost:8080/mypage/bin/controller.py")
print s.echo("hello")
But when I try to make an ajax call using jQuery in firebug console (in context of my page):
var jqxhr = $.getJSON("bin/controller.py", {"params": ["hello"], "method": "echo", "id": 1}, function(data) { alert('success!'); });
I constantly receive this error:
{"error":{"message":"","name":"ServiceRequestNotTranslatable"},"result":null,"id":""}
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是在 jQuery 中进行 JSON RPC 调用的方法:
需要是 HTTP POST 方法,以便我们可以发送数据。
数据实际上需要是 JSON 编码的字符串。如果您传递一个对象,
jQuery.ajax
将对它进行 URL 编码,就像表单发布一样(即“method=echo¶ms=...”)。因此,使用 JSON.stringify 对其进行序列化,并将contentType
设置为"application/json"
来表示我们正在发送 JSON 而不是“application/x-form-urlencoded”
。设置
dataType: "json"
只是告诉 jQuery 反序列化返回的数据(当然也是 JSON 格式),这样我们就可以将其作为对象访问。This is how to make a JSON RPC call in jQuery:
Needs to be HTTP POST method so we can send data.
The data actually needs to be a string in JSON encoding. If you pass an object,
jQuery.ajax
will URL-encode it like it would for a form post (i.e. "method=echo¶ms=..."). So, useJSON.stringify
to serialize it, and setcontentType
to"application/json"
to signify that we're sending JSON instead of"application/x-form-urlencoded"
.Setting
dataType: "json"
just tells jQuery to unserialize the returned data (also JSON format, of course), so we can access it as an object.使用 flask、它很容易与 jquery 一起使用。
You'd probably have an easier time implementing your service with flask, it's easy to use with jquery.