2013-06-25 1 views
0

Часть моего приложения отображается с использованием данных из запроса JSONP. Я хотел бы иметь возможность кэшировать результат этого запроса на стороне клиента, используя Sammy.Session.Настройка сеанса Sammy.js на результат запроса JSONP

Однако у меня возникли трудности, так как запрос JSONP является синхронным. Вот мой текущий, неработающий код:

this.get('#/projects', function(context) { 
    var categories = this.session('categories', function() { 
     var data; 
     $.getJSON('http://mysite.com/projects/categories/?jsoncallback=?', null, 
      function(json) { 
       data = json.categories; 
      }); 
      return data; 
     }); 
    }); 

    // categories is undefined at this point, 
    // because the JSONP call may not have finished 

    // code that renders the data 

    this.session('categories', categories); 
}); 

То, что я хотел бы не нужно сделать, это сделать запрос JSONP если категории находятся в сессии. Есть ли способ сделать остальную часть кода маршрута до тех пор, пока запрос JSONP не будет завершен?

ответ

0

Единственный способ, который я мог решить, состоял в том, чтобы не пытаться использовать обратный вызов, если сеанс не найден, и использовать общую функцию, вызываемую из результата, запрос JSON или доступность сеанса. Если кто-то знает лучший способ сделать это, я хотел бы увидеть пример.

this.get('#/projects', function(context) { 
    ... 

    var categories = this.session('categories'); 

    if (categories == undefined) { 
     this.load('http://mydomain.com/projects/categories/?jsoncallback=?', 
      {dataType: 'json'}) 
      .then(function(json) { 
       context.session('categories', json.categories); 
       // call to shared function 
      }); 
    } 
    else { 
     // call to shared function 
    } 
}); 
Смежные вопросы