0

我已经尝试过 Qooxdoo 并使用 SimpleXMLRPCServer 制作了一个简单的 Python 服务器,通过 Python 测试我可以毫无问题地获取数据,但是我可以从 Qooxdoo 获取这些数据吗?我迷路了,我已经搜索了 3 天,但没有得到解决方案。

我试试这个:

var JSON_lista_empresas = 1000
button1.addListener("execute", function(e) 
{
    var rpc = new qx.io.remote.Rpc();
    rpc.setServiceName("get_data");
    //rpc.setCrossDomain(true);
    rpc.setUrl("http://192.168.1.54:46000");
    rpc.addListener("completed", function(event)
    {
        console.log(event.getData());
    });
    rpc.callAsync( JSON_lista_empresas, '');
});

我尝试了其他选择,但一无所获:(

文件链接:

http://mieresdelcamin.es/owncloud/public.php?service=files&dir=%2Fjesus%2Ffiles%2FQooxdoo

我尝试并阅读了所有 qooxdoo-contrib。


出色地,

RpcPython --> 好的

并在 class/qooxdoo -> test.py

运行服务器 [start-server.py] 并从 webroser 查询:

http://127.0.0.1:8000//?_ScriptTransport_id=1&nocache=1366909868006&_ScriptTransport_data={%22service%22%3A%22qooxdoo.test%22%2C%22method%22%3A%22echo%22%2C%22id%22%3A1%2C%22params%22%3A[%22Por%20fin%22]}

webroser 中的回复是:

qx.io.remote.ScriptTransport._requestFinished(1,{"error": null, "id": 1, "result": "客户说:[Por fin]"});

但是如果我从 qooxdoo 查询,比如回复是 [error.png]

qooxdoo 的代码:

var rpc = new qx.io.remote.Rpc( "http://127.0.0.1:8000/");
    rpc.setCrossDomain( true);
    rpc.setServiceName( 'qooxdoo.test');
// asynchronous call
    var handler = function(result, exc) {
        if (exc == null) {
            alert("Result of async call: " + result);
        } else {
            alert("Exception during async call: " + exc+ result);
        }
    };
rpc.callAsync(handler, "echo", "Por fin");

我输了 :((

文件在:

http://mieresdelcamin.es/owncloud/public.php?service=files&dir=%2Fjesus%2Ffiles%2FQooxdoo

好吧,使用 Firebug,owncloud qx.io.remote.ScriptTransport 中的这个错误......被检测到

¿?................

此致。

4

4 回答 4

1

我猜您将 XML-RPC 与 JSON-RPC 混淆了,而 qooxdoo 仅支持后者。这些协议相似,但数据交换格式不同(XML 或 JSON)。而不是SimpleXMLRPCServer您可以在服务器端使用“RpcPython”,这是一个 qooxdoo contrib 项目。

看:

启动并运行此服务器后,您应该能够对其进行测试:

之后,您的 qooxdoo(客户端)代码也有望正常工作。:)

于 2013-04-24T09:09:27.497 回答
0

好的,

在第 66 行的 qxjsonrc 模块的文件 http.py 中更改

response='qx.io.remote.ScriptTransport._requestFinished(%s,%s);'%(scriptTransportID,response)

为了

response='qx.io.remote.transport.Script._requestFinished(%s,%s);'%(scriptTransportID,response)

并且运行良好:))

这个包修改的链接:

http://mieresdelcamin.es/owncloud/public.php?service=files&dir=%2Fjesus%2Ffiles%2FQooxdoo

最好的问候和感谢!!!

于 2013-04-27T06:07:02.130 回答
0

正如 Richard 已经指出的那样,Qooxdoo 只支持它的 JSON-RPC 风格。

我维护了一个名为QooxdooCherrypyJsonRpc的原始rpcpython的分支。主要目标是将传输协议交给一些健壮的框架,只留下 JSON RPC 的东西。CherryPy 显然是一个健壮的框架,允许 HTTP、WSGI 和 FastCGI 部署。代码被重构并被测试覆盖。后来我添加了上传/下载支持和一致的时区日期时间交换。

至少你的 Python 后端可能看起来像(称之为 test.py):

import cherrypy
import qxcpjsonrpc as rpc

class Test(rpc.Service):

  @rpc.public
  def add(self, x, y):
    return x + y

config = {
  '/service' : {
    'tools.jsonrpc.on' : True
  },
  '/resource' : {
    'tools.staticdir.on'  : True,
    'tools.staticdir.dir' : '/path/to/your/built/qooxdoo/app'
  }
}
cherrypy.tools.jsonrpc = rpc.ServerTool()

if __name__ == '__main__':
  cherrypy.quickstart(config = config)

然后您可以在您的 qooxdoo 代码中执行以下操作:

var rpc = new qx.io.remote.Rpc();
rpc.setServiceName('test.Test');
rpc.setUrl('http://127.0.0.1:8080/service');
rpc.setCrossDomain(true); // you need this for opening app from file://
rpc.addListener("completed", function(event)
{
  console.log(event.getData());
});
rpc.callAsyncListeners(this, 'add', 5, 7);

或者直接打开链接:

http://127.0.0.1:8080/service?_ScriptTransport_id=1&_ScriptTransport_data=%7B%22params%22%3A+%5B12%2C+13%5D%2C+%22id%22%3A+1%2C+%22service%22%3A+%22test.Test%22%2C+%22method%22%3A+%22add%22%7D

有关更多信息,请查看我在上面发布的包页面。

于 2014-04-16T14:09:40.740 回答
-1

Richard Sternagel 写了关于 rpcpython 的文章。此版本的 rpcpython 不适用于当前版本的 simplejson。因为在 json.py 有不正确的导入:

    from simplejson.decoder import ANYTHING
    from simplejson.scanner import Scanner, pattern

改进 rpcpython 或使用其他服务器,例如 CherryPy。

于 2013-04-25T11:57:16.590 回答