繁体   English   中英

当另一个完成时,我怎么能触发func?

[英]How could I trigger func when another has been completed?

我正在使用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();创建一些回调loadTweets(); 但我不能。

回调并不是一个坏主意。

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);
});

尝试jQuery方法链接:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM