通过jquery到Tornado Web服务器的jsonrpc 2.0调用得到了 “200 OK”http响应和我的网络嗅探器显示解码 响应为包含
{“jsonrpc”:“2.0”,“error”:null,“result”:3500,“id”:“jsonrpc”}
即有效的jsonrpc 2.0响应。 3500也是正确的结果, RPC是一个简单的添加函数。
然而,firebug没有显示响应和.ajax 成功回调 没有触发。 .ajax()错误和完成回调是 触发了,但没有告诉我这个问题。这里是 index.html触发ajax()调用。
$(document).ready(function(){
$.ajax({
url: 'http://localhost:8080',
data: JSON.stringify ({jsonrpc:'2.0',method:'add', params:[1400,2100],id:"jsonrpc"} ), // id is needed !!
type:"POST",
dataType:"json",
success: function (result) {
alert("ok");
},
error: function (err,status,thrown) {
alert ("this syntax sucks!! " + " ERROR: " + err + " STATUS: " + status + " " + thrown );
},
complete: function (xhr,status) {
alert('Complete=> showing status as: '+ status);
data = $.parseJSON(xhr.responseText);
alert (data);
}
});
});
答案 0 :(得分:5)
我发现问题是使用Firefox“File Open”打开index.html而不是让我的网络服务器向我发送index.html(通过浏览http://localhost:8080)
这是一个完整的工作示例,用于进行JSON RPC调用并使用简单警报显示结果。 RPC是一个基本的附加功能。
要看到它的实际效果:
保存index.html(2)和webserver.py(1)。将webserver.py编辑为 反映index.html的位置
启动webserver.py(chmod a + x webserver.py。sudo ./webserver.py)
启动Firefox并浏览到localhost:8080。这将加载index.html, 触发ajax()调用并使用警报显示结果。
(1)Web服务器是使用tornadorpc模块并用Python编写的Tornado。这是:
#! /usr/bin/python2.6
import tornado.httpserver import tornado.ioloop import tornado.web
from tornadorpc.json import JSONRPCHandler from tornadorpc import private, start_server
class MainHandler(tornado.web.RequestHandler):
def get(self,upath):
self.write( open('/home/travis/EXPLORE/webApps/index.html').read() )
class Tree(object):
def power(self, base, power, modulo=None):
return pow(base, power, modulo)
def _private(self):
# Won't be callable
return False
class Handler(JSONRPCHandler):
print ('In Handler()...')
tree = Tree()
def add(self, x, y):
print ('add() method called...')
return x+y
def ping(self, obj):
return obj
# Order is important here.. first matched handler in array is used !! handlers = [
('/RPC2',Handler),
(r"/(.*)", MainHandler),
]
start_server(handlers, port=8080)
(2)index.html使用jquery的ajax()方法对添加远程过程进行JSONRPC调用。确保将其保存到的位置与(1)中的Web服务器尝试从中读取其内容的路径相匹配。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script>
$(document).ready(function(){
$.ajax({
url: 'http://localhost:8080/RPC2',
data: JSON.stringify ({jsonrpc:'2.0',method:'add', params:[1400,2100],id:"jsonrpc"} ), // id is needed !!
type:"POST",
dataType:"json",
success: function (data) { alert("The result is : " + data.result);},
error: function (err) { alert ("Error");}
});
});
</script>
</head>
<body>
<h1> jQuery JSON RPC 2.0 demo </h1>
</body>
</html>