Prevent ajax race conditions when using routes by offering a callback that is run after the the routes have finished loading

This commit is contained in:
Bernhard Posselt 2012-11-14 22:37:21 +01:00
parent 8b03b683df
commit 9b8375cf2c
1 changed files with 15 additions and 2 deletions

View File

@ -1,17 +1,30 @@
OC.router_base_url = OC.webroot + '/index.php/',
OC.Router = {
loadedCallback: null,
// register your ajax requests to load after the loading of the routes
// has finished. otherwise you face problems with race conditions
registerLoadedCallback: function(callback){
if(this.routes_request.state() === 'resolved'){
callback();
} else {
this.loadedCallback = callback;
}
},
routes_request: $.ajax(OC.router_base_url + 'core/routes.json', {
dataType: 'json',
success: function(jsondata) {
if (jsondata.status == 'success') {
if (jsondata.status === 'success') {
OC.Router.routes = jsondata.data;
if(OC.Router.loadedCallback !== null){
OC.Router.loadedCallback();
}
}
}
}),
generate:function(name, opt_params) {
if (!('routes' in this)) {
if(this.routes_request.state() != 'resolved') {
alert('wait');// wait
alert('To avoid race conditions, please register a callback');// wait
}
}
if (!(name in this.routes)) {