diff --git a/addons/web/static/src/js/core/mixins.js b/addons/web/static/src/js/core/mixins.js index 93468e03fc0..6f640cb3300 100644 --- a/addons/web/static/src/js/core/mixins.js +++ b/addons/web/static/src/js/core/mixins.js @@ -456,7 +456,8 @@ var ServiceProvider = { }, _call_service: function (event) { var service = this.services[event.data.service]; - var result = service[event.data.method].apply(service, event.data.args); + var args = event.data.args.concat(event.target); + var result = service[event.data.method].apply(service, args); event.data.callback(result); }, }; diff --git a/addons/web/static/src/js/services/ajax_service.js b/addons/web/static/src/js/services/ajax_service.js index dbcd851e203..480549347d4 100644 --- a/addons/web/static/src/js/services/ajax_service.js +++ b/addons/web/static/src/js/services/ajax_service.js @@ -6,8 +6,18 @@ var session = require('web.session'); var AjaxService = AbstractService.extend({ name: 'ajax', - rpc: function (route, args, options) { - return session.rpc(route, args, options); + rpc: function (route, args, options, target) { + return $.Deferred(function (def) { + session.rpc(route, args, options).then(function () { + if (!target.isDestroyed()) { + def.resolve.apply(def, arguments); + } + }, function () { + if (!target.isDestroyed()) { + def.reject.apply(def, arguments); + } + }); + }).promise(); }, });