2013-06-25 3 views
0

내 응용 프로그램의 일부가 JSONP 요청의 데이터를 사용하여 렌더링됩니다. Sammy.Session을 사용하여 클라이언트 요청의 결과를 캐시 할 수 있기를 원합니다.JSONP 요청의 결과로 Sammy.js 세션 설정

그러나 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 
    } 
});