diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 20baae85d76..98ee13dd62e 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -361,12 +361,21 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b error_callback = typeof(error_callback) != "undefined" ? error_callback : this.on_rpc_error; // Call using the rpc_mode - return this.rpc_ajax(url, { + var deferred = $.Deferred(); + this.rpc_ajax(url, { jsonrpc: "2.0", method: "call", params: params, id:null - }, success_callback, error_callback); + }).then(function () {deferred.resolve.apply(deferred, arguments);}, + function(error) {deferred.reject(error, $.Event());}); + return deferred.then(success_callback, function(error, event) { + deferred.fail(function(error2, event2) { + if (!event.isDefaultPrevented()) { + error_callback(error2, event2); + } + }); + }).promise(); }, /** * Raw JSON-RPC call @@ -388,33 +397,35 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b dataType: 'json', contentType: 'application/json', data: JSON.stringify(payload), - processData: false, - success: function(response, textStatus, jqXHR) { + processData: false + }, url); + var deferred = $.Deferred(); + $.ajax(ajax).done(function(response, textStatus, jqXHR) { self.on_rpc_response(); if (response.error) { if (response.error.data.type == "session_invalid") { self.uid = false; self.on_session_invalid(function() { - self.rpc(url, payload.params, success_callback, error_callback); + self.rpc(url, payload.params, + function() {deferred.resolve.apply(deferred, arguments);}, + function() {deferred.reject.apply(deferred, arguments);}); }); } else { - error_callback(response.error); + deferred.reject(response.error); } - } else if (success_callback) { - success_callback(response["result"], textStatus, jqXHR); + } else { + deferred.resolve(response["result"], textStatus, jqXHR); } - }, - error: function(jqXHR, textStatus, errorThrown) { + }).fail(function(jqXHR, textStatus, errorThrown) { self.on_rpc_response(); var error = { code: -32098, message: "XmlHttpRequestError " + errorThrown, data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } }; - error_callback(error); - } - }, url); - return $.ajax(ajax); + deferred.reject(error); + }); + return deferred.promise().then(success_callback, error_callback); }, on_rpc_request: function() { }, diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index d279eb5d3aa..e519faf9f53 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1267,7 +1267,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, build_relation_context(self)); dataset.name_create(name, function(data) { self._change_int_ext_value(data.result); - }).fail(function() { + }).fail(function(error, event) { + event.preventDefault(); self._change_int_value(null); self._search_create_popup("form", undefined, {"default_name": name}); });