diff --git a/public_html/js/Api.js b/public_html/js/Api.js index 5b875d6b..f60174de 100644 --- a/public_html/js/Api.js +++ b/public_html/js/Api.js @@ -3,6 +3,11 @@ var App = App || {}; App.API = function(_, jQuery, promise, appState) { var baseUrl = '/api/'; + var AJAX_UNSENT = 0; + var AJAX_OPENED = 1; + var AJAX_HEADERS_RECEIVED = 2; + var AJAX_LOADING = 3; + var AJAX_DONE = 4; function get(url, data) { return request('GET', url, data); @@ -24,8 +29,9 @@ App.API = function(_, jQuery, promise, appState) { var fullUrl = baseUrl + '/' + url; fullUrl = fullUrl.replace(/\/{2,}/, '/'); - return promise.make(function(resolve, reject) { - jQuery.ajax({ + var xhr = null; + var apiPromise = promise.make(function(resolve, reject) { + xhr = jQuery.ajax({ headers: { 'X-Authorization-Token': appState.get('loginToken') || '', }, @@ -46,6 +52,8 @@ App.API = function(_, jQuery, promise, appState) { data: data, }); }); + apiPromise.xhr = xhr; + return apiPromise; } function stripMeta(data) { @@ -62,7 +70,13 @@ App.API = function(_, jQuery, promise, appState) { get: get, post: post, put: put, - delete: _delete + delete: _delete, + + AJAX_UNSENT: AJAX_UNSENT, + AJAX_OPENED: AJAX_OPENED, + AJAX_HEADERS_RECEIVED: AJAX_HEADERS_RECEIVED, + AJAX_LOADING: AJAX_LOADING, + AJAX_DONE: AJAX_DONE, }; }; diff --git a/public_html/js/Presenters/PostUploadPresenter.js b/public_html/js/Presenters/PostUploadPresenter.js index 2983326a..9b719aa4 100644 --- a/public_html/js/Presenters/PostUploadPresenter.js +++ b/public_html/js/Presenters/PostUploadPresenter.js @@ -23,6 +23,7 @@ App.Presenters.PostUploadPresenter = function( var fileDropper; var interactionEnabled = true; var currentUploadId = null; + var currentUploadXhr = null; function init(params, loaded) { topNavigationPresenter.select('upload'); @@ -533,6 +534,9 @@ App.Presenters.PostUploadPresenter = function( function stopUpload() { currentUploadId = null; showUploadError('Upload stopped.'); + if (currentUploadXhr && currentUploadXhr.readystate !== api.AJAX_DONE) { + currentUploadXhr.abort(); + } } function uploadNextPost() { @@ -566,7 +570,10 @@ App.Presenters.PostUploadPresenter = function( return; } - promise.wait(api.post('/posts', formData)) + var apiPromise = api.post('/posts', formData); + currentUploadXhr = apiPromise.xhr; + + promise.wait(apiPromise) .then(function(response) { $row.slideUp(function(response) { if (priorUploadId === currentUploadId) {