0

我正在使用JQuery收集最新的推文Twitter API,但是在调用两个函数时遇到了一些问题。

$(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");
},

问题是,如果调用功能如下:

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

});

第二个函数在加载推文之前执行,所以它没有什么可搜索的,因为我可以看到警报(“hola”)工作,但Ojeto为 0。

我试图在内部创建某种回调,loadTweets();但我做不到。

4

2 回答 2

2

回调不是一个坏主意。

更改loadTweets为如下所示:

loadTweets: function(callback) {

并在这里调用它:

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

然后在您的 DOM 就绪回调中:

$(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);
});
于 2013-09-28T20:03:07.807 回答
0

尝试 jQuery 方法链接:

$(document).ready(function(){
 JQTWEET.loadTweets().showHideTweets();
});
于 2013-09-28T20:07:17.803 回答