diff options
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/framework/ajax.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/addons/web/static/src/js/framework/ajax.js b/addons/web/static/src/js/framework/ajax.js index 444784ef0fd..f8392287b26 100644 --- a/addons/web/static/src/js/framework/ajax.js +++ b/addons/web/static/src/js/framework/ajax.js @@ -2,6 +2,7 @@ odoo.define('web.ajax', function (require) { "use strict"; var time = require('web.time'); +var utils = require('web.utils'); function genericJsonRpc (fct_name, params, fct) { var data = { @@ -274,6 +275,51 @@ function get_file(options) { timer = setTimeout(waitLoop, CHECK_INTERVAL); }; +function post (controller_url, data) { + + var progressHandler = function (deferred) { + return function (state) { + if(state.lengthComputable) { + deferred.notify({ + h_loaded: utils.human_size(state.loaded), + h_total : utils.human_size(state.total), + loaded : state.loaded, + total : state.total, + pcent : Math.round((state.loaded/state.total)*100) + }); + } + }; + }; + + var Def = $.Deferred(); + var compatibility = !(typeof(FormData)); + var postData = compatibility ? new FormDataCompatibility() : new FormData(); + + $.each(data, function(i,val) { + postData.append(i, val); + }); + + var xhr = new XMLHttpRequest(); + if(compatibility) { + postData.setContentTypeHeader(xhr); + postData = postData.buildBody(); + } + + if(xhr.upload) xhr.upload.addEventListener('progress', progressHandler(Def), false); + + var ajaxDef = $.ajax(controller_url, { + xhr: function() {return xhr;}, + data: postData, + processData: false, + contentType: false, + type: 'POST' + }).then(function (data) {Def.resolve(data);}) + .fail(function (data) {Def.reject(data);}); + + return Def; +} + + var loadXML = (function () { var loading = false; @@ -315,6 +361,7 @@ return { loadJS: loadJS, loadXML: loadXML, get_file: get_file, + post: post, }; }); |
