[FIX] jsonp works

bzr revid: al@openerp.com-20111216164739-ei5hdk4sq32eppzc
This commit is contained in:
Antony Lesuisse 2011-12-16 17:47:39 +01:00
parent 3183c975af
commit 65c5eaca8d
4 changed files with 12 additions and 8 deletions

View File

@ -138,9 +138,10 @@ class JsonRequest(WebRequest):
:returns: an utf8 encoded JSON-RPC2 or JSONP reply
"""
args = self.httprequest.args
jsonp = args.get('jsonp', False)
jsonp = args.get('jsonp')
requestf = None
request = None
print "ARGS",args
if jsonp and self.httprequest.method == 'POST':
# jsonp 2 steps step1 POST: save call
@ -149,13 +150,13 @@ class JsonRequest(WebRequest):
headers=[('Content-Type', 'text/plain; charset=utf-8')]
r = werkzeug.wrappers.Response(request_id, headers=headers)
return r
elif jsonp and args.get('r'):
# jsonp method GET
request = args.get('r')
elif jsonp and args.get('id'):
# jsonp 2 steps step2 GET: run and return result
self.init(args)
request = self.session.jsonp_requests.pop(args.get(id), "")
elif jsonp and args.get('r'):
# jsonp method GET
request = args.get('r')
else:
# regular jsonrpc2
requestf = self.httprequest.stream
@ -167,6 +168,7 @@ class JsonRequest(WebRequest):
if requestf:
self.jsonrequest = simplejson.load(requestf, object_hook=nonliterals.non_literal_decoder)
else:
print "CACA",request
self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder)
self.init(self.jsonrequest.get("params", {}))
if _logger.isEnabledFor(logging.DEBUG):

View File

@ -291,7 +291,7 @@ class Service(object):
"""
self.connector = connector
self.service_name = service_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name)
self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name or "")
def __getattr__(self, method):
"""
@ -407,7 +407,7 @@ class Model(object):
"""
self.connection = connection
self.model_name = model_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name)
self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name or "")
def __getattr__(self, method):
"""

View File

@ -1123,6 +1123,7 @@ openerp.web.EmbeddedClient = openerp.web.Widget.extend({
});
openerp.web.embed = function (origin, dbname, login, key, action, options) {
// TODO insert <link rel="stylesheet" href="origin +'/web/webclient/css'"> into dom head
var currentScript = document.currentScript;
if (!currentScript) {
var sc = document.getElementsByTagName('script');
@ -1130,10 +1131,11 @@ openerp.web.embed = function (origin, dbname, login, key, action, options) {
}
openerp.connection.bind(origin).then(function () {
openerp.connection.session_authenticate(dbname, login, key).then(function () {
var client = new session.web.EmbeddedClient(action_id, options);
var client = new openerp.web.EmbeddedClient(action, options);
client.insertAfter(currentScript);
});
});
}
};

View File

@ -480,7 +480,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
}, url);
var payload_str = JSON.stringify(payload);
var payload_url = $.param({r:payload_str});
if(playload_url.length < 2000) {
if(payload_url.length < 2000) {
// Direct jsonp request
ajax.data.r = payload_str;
return $.ajax(ajax);