]> source.dussan.org Git - nextcloud-server.git/commitdiff
Prevent ajax race conditions when using routes by offering a callback that is run...
authorBernhard Posselt <nukeawhale@gmail.com>
Wed, 14 Nov 2012 21:37:21 +0000 (22:37 +0100)
committerBernhard Posselt <nukeawhale@gmail.com>
Wed, 14 Nov 2012 21:37:21 +0000 (22:37 +0100)
core/js/router.js

index 8b66f5a05c5c5f79d8a84e79117dd36464635f3d..02c8d11e695c9be491adafdc31e937127d5e7982 100644 (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)) {