2013-09-28 2 views
0

Twitter API을 사용하여 최신 트윗을 수집하려면 JQuery을 사용하고 있지만 두 가지 기능을 호출 할 때 몇 가지 문제가 있습니다.다른 것이 완료되면 어떻게 func을 트리거 할 수 있습니까?

$(document).ready(function(){ 
JQTWEET.loadTweets(); 

});

는, 확인 작업을하지만, 나는이 함수를 호출 할 :

showHideTweets: function() { 
    alert("hola"); 
    var ojeto = $(JQTWEET.appendTo).find(".item").first(); 
    $(JQTWEET.appendTo).find(".item").first().css("display", "block"); 
}, 

두 함수는 내부에 : jqtweet.js ...

loadTweets: function() { 

    var request; 

    // different JSON request {hash|user} 
    if (JQTWEET.search) { 
     request = { 
      q: JQTWEET.search, 
      count: JQTWEET.numTweets, 
      api: 'search_tweets' 
     } 
    } else { 
     request = { 
      q: JQTWEET.user, 
      count: JQTWEET.numTweets, 
      api: 'statuses_userTimeline' 
     } 
    } 

    $.ajax({ 
     url: 'tweets.php', 
     type: 'POST', 
     dataType: 'json', 
     data: request, 
     success: function(data, textStatus, xhr) { 

      if (data.httpstatus == 200) { 
       if (JQTWEET.search) data = data.statuses; 

      var text, name, img;    

      try { 
       // append tweets into page 
       for (var i = 0; i < JQTWEET.numTweets; i++) {  

       img = ''; 
       url = 'http://twitter.com/' + data[i].user.screen_name + '/status/' + data[i].id_str; 
       try { 
        if (data[i].entities['media']) { 
        img = '<a href="' + url + '" target="_blank"><img src="' + data[i].entities['media'][0].media_url + '" /></a>'; 
        } 
       } catch (e) { 
        //no media 
       } 

       var textoMostrar = JQTWEET.template.replace('{TEXT}', JQTWEET.ify.clean(data[i].text)).replace('{USER}', data[i].user.screen_name).replace('{IMG}', img).replace('{URL}', url); 
       /*.replace('{AGO}', JQTWEET.timeAgo(data[i].created_at)) */ 
       //alert(JQTWEET.timeAgo(data[i].created_at)); 


       $(JQTWEET.appendTo).append(JQTWEET.template.replace('{TEXT}', JQTWEET.ify.clean(data[i].text)) 
        .replace('{USER}', data[i].user.screen_name) 
        .replace('{NAME}', data[i].user.name) 
        .replace('{IMG}', img) 
        .replace('{PROFIMG}', data[i].user.profile_image_url) 
        /*.replace('{AGO}', JQTWEET.timeAgo(data[i].created_at))*/ 
        .replace('{URL}', url)          
        ); 
       if ((JQTWEET.numTweets - 1) == i) { 
       $(JQTWEET.appendTo).find(".item").last().addClass("last"); 
       } 
       } 
      } catch (e) { 
       //item is less than item count 
      } 

      if (JQTWEET.useGridalicious) {     
       //run grid-a-licious 
     $(JQTWEET.appendTo).gridalicious({ 
      gutter: 13, 
      width: 200, 
      animate: true 
     });      
     }     

      } else alert('no data returned'); 

     } 

    }); 
    callback(); 
}, 

showHideTweets: function() { 
    alert("hola"); 
    var ojeto = $(JQTWEET.appendTo).find(".item").first(); 
    $(JQTWEET.appendTo).find(".item").first().css("display", "block"); 
}, 

문제는있는 경우 전화 기능은 다음과 같습니다 :

}); 트윗가로드되기 전에 그것이 내가 작업 ("안녕") 경고를 볼 수 있기 때문에,에서 검색 할 아무것도 그래서

두 번째 기능은 실행하지만 Ojeto 내가 만들려고 0

입니다 loadTweets(); 안에 어떤 종류의 콜백이 있었지만 나는 그럴 수 없었다.

답변

2

콜백은 좋지 않습니다.

loadTweets: function(callback) { 

를 그리고 여기 전화 :

변화 loadTweets는 다음과 같이하는 DOM 준비 콜백에서

$.ajax({ 
    ... 
    success: function(data, textStatus, xhr) { 
     ... 
     if (callback) callback(); 
    } 
}); 

: 그리고

$(document).ready(function(){ 
JQTWEET.loadTweets(JQTWEET.showHideTweets); 
}); 

귀하의 다른 옵션을 (이 실제로 일반적으로 선호하는 것은 deferred 객체를 사용하는 것입니다.

loadTweets: function(callback) { 
    var def = $.Deferred(); 
    ... 
    $.ajax({ 
     ... 
     success: function(data, textStatus, xhr) { 
      ... 
      def.resolve(); 
     } 
    }); 
    return def.promise(); 
} 

...

$(document).ready(function(){ 
JQTWEET.loadTweets().done(JQTWEET.showHideTweets); 
}); 
0

jQuery를 메소드 체인보십시오 :

$(document).ready(function(){ 
JQTWEET.loadTweets().showHideTweets(); 
}); 
관련 문제