mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
DEV: allow Discourse.ajax to be aborted if needed
This commit is contained in:
parent
066824e545
commit
c2fd93ffa8
1 changed files with 15 additions and 4 deletions
|
@ -19,6 +19,7 @@ Discourse.Ajax = Em.Mixin.create({
|
|||
**/
|
||||
ajax: function() {
|
||||
var url, args;
|
||||
var ajax;
|
||||
|
||||
if (arguments.length === 1) {
|
||||
if (typeof arguments[0] === "string") {
|
||||
|
@ -95,22 +96,32 @@ Discourse.Ajax = Em.Mixin.create({
|
|||
args.cache = false;
|
||||
}
|
||||
|
||||
$.ajax(Discourse.getURL(url), args);
|
||||
ajax = $.ajax(Discourse.getURL(url), args);
|
||||
};
|
||||
|
||||
var promise;
|
||||
|
||||
// For cached pages we strip out CSRF tokens, need to round trip to server prior to sending the
|
||||
// request (bypass for GET, not needed)
|
||||
if(args.type && args.type.toUpperCase() !== 'GET' && !Discourse.Session.currentProp('csrfToken')){
|
||||
return new Ember.RSVP.Promise(function(resolve, reject){
|
||||
$.ajax(Discourse.getURL('/session/csrf'), {cache: false})
|
||||
promise = new Ember.RSVP.Promise(function(resolve, reject){
|
||||
ajax = $.ajax(Discourse.getURL('/session/csrf'), {cache: false})
|
||||
.success(function(result){
|
||||
Discourse.Session.currentProp('csrfToken', result.csrf);
|
||||
performAjax(resolve, reject);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
return new Ember.RSVP.Promise(performAjax);
|
||||
promise = new Ember.RSVP.Promise(performAjax);
|
||||
}
|
||||
|
||||
promise.abort = function(){
|
||||
if (ajax) {
|
||||
ajax.abort();
|
||||
}
|
||||
};
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue