2011-08-04 14 views
0

Google 피드 API를 사용하여 RSS 피드 URL을 읽고 제목을 표시했습니다. 함수를 호출 할 때 get_rss1_feeds 직접 작동합니다. 하지만 setTimeout 또는 setInterval로 호출하면 빈 화면 만 볼 수 있으며 페이지가로드를 멈추지 않습니다 !!Google 피드 API의 setTimeout 문제

<script src="http://www.google.com/jsapi?key=AIzaSyA5m1Nc8ws2BbmPRwKu5gFradvD_hgq6G0" type="text/javascript"></script>  
<script type="text/javascript" src="jquery-1.5.2.min.js"></script> 
<script type="text/javascript" src="query.mobile-1.0a4.1.min.js"></script> 
<script type="text/javascript" src="jsRss.js"></script> 
<script type="text/javascript" src="notification.js"></script> 

내 notification.js

/** global variable **/ 
var Rsstitle; 
/** end global variable **/ 

document.addEventListener("deviceready", onDeviceReady, false); 
// PhoneGap is ready 
// 
function onDeviceReady() { 
// Empty 
} 

function get_rss1_feeds() { 
    console.log('test');    // this is being outputted 
    var Rss1_title = getRss("http://yofreesamples.com/category/free-coupons/feed/?type=rss", function(entry_title) {  
     if(Rsstitle != entry_title) 
     Rsstitle = entry_title; 
     console.log('test1',Rsstitle); // not working 
    }); 
} 

//get_rss1_feeds() works fine 
setTimeout(get_rss1_feeds,5000); 

내 jsRss.js 당신은 getRss() 기능에 중단 점을 설정하고이 setTimeout()에서라고 할 때에 무슨 일이 일어나고 있는지 볼 필요가

function getRss(url, callback){ 
    console.log('test2');   // this is being outputted 
    if(url == null) return false; 
    google.load("feeds", "1"); 
    // Our callback function, for when a feed is loaded. 
    function feedLoaded(result) { 
     if (!result.error) { 
      var entry = result.feed.entries[0]; 
      var entry_title = entry.title; // need to get this value 
      callback && callback(entry_title);   
     } 
    } 
    function Load() { 
     // Create a feed instance that will grab feed. 
     var feed = new google.feeds.Feed(url); 
     // Calling load sends the request off. It requires a callback function. 
     feed.load(feedLoaded);  
    }  
    google.setOnLoadCallback(Load);    
} 

답변

1

파일 . 내 생각 엔 그 함수의 어떤 것이 범위 지정 문제가 있고 setTimeout이 실행되는 전역 범위에서 사용할 수는 없지만 시도한 정상 범위에서 사용할 수 있습니다. 변수이거나 함수가 될 수 있습니다 사용할 수 없습니다.

이 기능은 다른 기능에서 선언되어 실제로 사용할 수없는 경우에 발생할 수 있습니다.

var Rsstitle = entry_title; 
+0

나는를 getRSS() 함수 내부 CONSOLE.LOG은()과 같다 않았다

var Rsstitle; if(Rsstitle != entry_title) Rsstitle = entry_title; 

당신이 그것을 대체 할 수

참고로,이 코드 블록은 매우 이상한 그것의 기능 안쪽에 가지 않을 것이다. 사실 콜백 함수에서 값을 얻는 초기 문제가있었습니다. [내 이전 질문에 대한 링크] (http://stackoverflow.com/questions/6946711/how-to-get-the-value-from-a-callback-function). 이것은 거의 그 연속입니다. –

+0

일단 5000 밀리 초마다 값을 얻으면 동일한 제목을 반복해서 표시하지 않아야합니다. 그냥 중복을 피하기 위해 !! –

+0

'getRSS()'가 호출되지 않으면'get_rss1_feeds()'에서 호출 할 때 어떤 종류의 범위 문제가 있어야합니다. console.log를'get_rss1_feeds()'의 첫 번째 줄에 넣고 호출되는지 확인하십시오. 이 제목을 이전 제목과 비교하려면이 선언을'var Rsstitle; '을 최상위 범위로 옮겨야합니다. 그래서 하나의 호출에서 다음 호출까지 지속될 전역 변수가 될 수 있습니다. 지금 당장은 get_rss1_feeds()가 끝나자 마자 리사이클되어 아무것도 얻지 못하는 지역 변수입니다. – jfriend00