mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-28 01:56:01 -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() {
|
ajax: function() {
|
||||||
var url, args;
|
var url, args;
|
||||||
|
var ajax;
|
||||||
|
|
||||||
if (arguments.length === 1) {
|
if (arguments.length === 1) {
|
||||||
if (typeof arguments[0] === "string") {
|
if (typeof arguments[0] === "string") {
|
||||||
|
@ -95,22 +96,32 @@ Discourse.Ajax = Em.Mixin.create({
|
||||||
args.cache = false;
|
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
|
// For cached pages we strip out CSRF tokens, need to round trip to server prior to sending the
|
||||||
// request (bypass for GET, not needed)
|
// request (bypass for GET, not needed)
|
||||||
if(args.type && args.type.toUpperCase() !== 'GET' && !Discourse.Session.currentProp('csrfToken')){
|
if(args.type && args.type.toUpperCase() !== 'GET' && !Discourse.Session.currentProp('csrfToken')){
|
||||||
return new Ember.RSVP.Promise(function(resolve, reject){
|
promise = new Ember.RSVP.Promise(function(resolve, reject){
|
||||||
$.ajax(Discourse.getURL('/session/csrf'), {cache: false})
|
ajax = $.ajax(Discourse.getURL('/session/csrf'), {cache: false})
|
||||||
.success(function(result){
|
.success(function(result){
|
||||||
Discourse.Session.currentProp('csrfToken', result.csrf);
|
Discourse.Session.currentProp('csrfToken', result.csrf);
|
||||||
performAjax(resolve, reject);
|
performAjax(resolve, reject);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} 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