如何使用$ .getJSON的结果?

zep_fan

解决了:

通过将tweetSweep函数内部包装在回调函数中(下面的代码片段),我能够解决此问题

这行得通,但我很想听听是否有其他可用的方法。

    // URL Constructor ---------- //
    tweetSweep: function() {
      this.getShortUrl(function(short) {
        for(var i = 0; i < s.tweets.length; i++) {
          
          var tweet = $(s.tweets[i]);
          var tweet_text = $(tweet).text();
          
          // Build the URL
          $(tweet).attr({
            href: s.tweet_url + tweet_text + ' ' + short + s.tweet_source,
            target: '_blank'
            });
          }
      });
    },

    // URL Shortening via Bitly API ---------- //
    getShortUrl: function(callback) {
       var accessToken = s.bitly_key;
       var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + s.post_url;

        $.getJSON(url, function(response) {
            callback(response.data.url);
        });
    }


原始问题:

我正在研究一个小的“ Tweet This”插件,它将使用包裹在a中的元素包装任何文本.tweet-embed并通过bit.ly API构建带有句子和当前页面的缩短URL的Twitter链接。

我正在getShortURL通过init函数调用函数,并且试图将其结果附加到tweetSweep函数中链接的href属性中(通过shorturl变量,该变量当前未定义...第39行):

(function() {

  /**
   * Main TweetEmbed object with settings
   * and helper functions to build "Tweet this"
   * links around desired text.
   * 
   * @type {Object}
   */
  
  var TweetEmbed = {

    // Settings ---------- //
    settings: {
      tweets: $('.tweet-embed'),
      tweet_url: 'http://twitter.com/home/?status=',
      tweet_source: ' — @handle',
      post_url: window.location.href,
      bitly_login: 'my_login_is_here',
      bitly_key: 'my_key_is_here'
    },

    // Initialization ---------- //
    init: function() {
      s = this.settings;
      this.tweetSweep();
      this.getShortUrl(s.post_url);
    },

    // URL Constructor ---------- //
    tweetSweep: function() {
      for(var i = 0; i < s.tweets.length; i++) {
        
        var tweet = $(s.tweets[i]);
        var tweet_text = $(tweet).text();
        
        // Build the URL
        $(tweet).attr({
          //href: s.tweet_url + tweet_text + s.tweet_source + shorturl,
          href: s.tweet_url + tweet_text + s.tweet_source,
          target: '_blank'
          });
        }
    },

    // URL Shortening via Bitly API ---------- //
    getShortUrl: function(url, callback) {
       var accessToken = s.bitly_key;
       var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + encodeURIComponent(url);

        $.getJSON(url, function(response) {
            short = response.data.url;
        });
    }

  }; // end TweetEmbed

  // Fire off TweetEmbed's initialization 
  TweetEmbed.init();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="tweet-embed">Test tweet here</a>

调用getShortUrl();函数时,如果short在控制台中键入,它将按预期吐出缩短的URL。我的问题是我无法弄清楚如何在插件的其他任何地方使用该响应(我试图将其保存到shorturl变量中却init无济于事)...

我一遍又一遍地搜索,发现了大量类似问题的建议,但是仍然无法弄清楚如何将其应用于我的代码。对于异步和回调爵士乐,我一无所知。

巴尔玛

tweetSweet可以接受可选shorturl参数,默认为空字符串。然后,在$.getJSON回调中,您可以调用,tweetSweep以使用API​​的响应来更新所有URL。

(function() {

  /**
   * Main TweetEmbed object with settings
   * and helper functions to build "Tweet this"
   * links around desired text.
   *
   * @type {Object}
   */

  var TweetEmbed = {

    // Settings ---------- //
    settings: {
      tweets: $('.tweet-embed'),
      tweet_url: 'http://twitter.com/home/?status=',
      tweet_source: ' — @handle',
      post_url: window.location.href,
      bitly_login: 'my_login_is_here',
      bitly_key: 'my_key_is_here'
    },

    // Initialization ---------- //
    init: function() {
      s = this.settings;
      this.tweetSweep();
      this.getShortUrl(s.post_url);
    },

    // URL Constructor ---------- //
    tweetSweep: function(shorturl) {
      if (!shorturl) {
        shorturl = '';
      }
      for (var i = 0; i < s.tweets.length; i++) {

        var tweet = $(s.tweets[i]);
        var tweet_text = $(tweet).text();

        // Build the URL
        $(tweet).attr({
          href: s.tweet_url + tweet_text + s.tweet_source + shorturl,
          target: '_blank'
        });
      }
    },

    // URL Shortening via Bitly API ---------- //
    getShortUrl: function(url) {
      var accessToken = s.bitly_key;
      var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + encodeURIComponent(url);
      var self = this;

      $.getJSON(url, function(response) {
        var short = response.data.url;
        self.tweetSweep(short);
      });
    }

  }; // end TweetEmbed

  // Fire off TweetEmbed's initialization 
  TweetEmbed.init();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="tweet-embed">Test tweet here</a>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章