2013-04-23 3 views
0

Я пробовал Qooxdoo, и я сделал простой сервер Python с SimpleXMLRPCServer, с тестом на Python я получаю данные без проблем, но могу ли я получить эти данные из Qooxdoo? Я заблудился, и я искал 3 дня, но не получил решений.Проблемы с QooxDoo FrontEnd + Python BackEnd (SimpleXMLRPCServer)

Я стараюсь это:

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 -подписка.


Ну,

RpcPython -> Ok

и в классе/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, { "ошибка": нулевой, "идентификатор": 1, "результат": «Клиент сказал: [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 эта ошибка в собственном свете qx.io. remote.ScriptTransport ..... это обнаружить

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

С наилучшими пожеланиями.

ответ

1

Я предполагаю, что вы смешиваете XML-RPC с JSON-RPC, а qooxdoo поддерживает только последний. Эти протоколы схожи, но формат обмена данными отличается (XML или JSON). Вместо SimpleXMLRPCServer вы можете использовать «RpcPython» на стороне сервера, который является проектом ввода qooxdoo.

См:

После того как этот сервер и работает, вы должны быть в состоянии проверить это:

После этого ваш код qooxdoo (клиент), надеюсь, также работает. :)

-1

Richard Sternagel написал (а) о rpcpython. Эта версия rpcpython не работает с текущей версией simplejson. Becouse в json.py имеют неправильный импорт:

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

Улучшите rpcpython или использовать другой сервер, например CherryPy.

0

Ok,

В файле http.py модуля qxjsonrc в строке 66 Изменение

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

С наилучшими пожеланиями и спасибо !!!

0

Поскольку Ричард уже указал, что Qooxdoo поддерживает только его вкус JSON-RPC.

Я поддерживаю вилку оригинала rpcpython под названием QooxdooCherrypyJsonRpc. Основная цель заключалась в том, чтобы передать транспортный протокол в некоторые надежные рамки и оставить только материал 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 

Для получения дополнительной информации ознакомьтесь с страницей упаковки, которую я разместил выше.