我正在写一个简单的函数来获取帖子的URL,然后返回它在Twitter上分享的次数。页面上有多个帖子,所以我需要为每个帖子运行该功能。以下是相关功能(请注意我使用RequireJS)。
function twitterCount($target) {
$article = $target.closest($('article')),
articleHREF = $target.parent().parent().attr('data-href');
APIURL = 'https://cdn.api.twitter.com/1/urls/count.json';
//Get count and set it as the inner HTML of .count
$.getJSON(APIURL + "?callback=?&url=" + articleHREF, function(data) {
$target.find('.count').html(data.count);
});
}
getTwitterCount: function() {
$twitterLink.each(function() {
$target = $(this);
$target.function(twitterCount($target));
});
}
该函数运行正常一次,并给出了页面上第一篇文章被喜欢的次数,但随后停止工作并吐出未捕获的TypeError:undefined不是函数 in控制台。我努力想知道为什么它会运行一次,但后来却不适用于其他所有帖子。该错误指向以下行...
$target.function(twitterCount($target));
输出应该在的HTML
<ul class="share-options" data-href="http://localhost/test-post/">
<li><a class="twitter" href="javascript:void(0)">
Twitter <span class="count twitter-count"></span>
</a></li>
<li><a class="linkedin" href="javascript:void(0)">LinkedIn</a></li>
</ul>
答案 0 :(得分:0)
我通过修改你的代码获得了成功。
主要变化:
.twitter
类引用更改为.twitter-count
以匹配您的HTML getTwitterLink
功能,并直接执行了each()
。$target.function(twitterCount($target))
替换为twitterCount($target)
这是一个很大的语法错误。以下代码评论中的其他更改。
function twitterCount($target) {
/* I simplified "parent().parent()" to "closest()" */
articleHREF = $target.closest('ul').attr('data-href');
APIURL = 'https://cdn.api.twitter.com/1/urls/count.json';
$.getJSON(APIURL + "?callback=?&url=" + articleHREF, function (data) {
/* I changed ".twitter" to ".twitter-count" to match the class in your HTML */
$target.find('.twitter-count').html(data.count);
}).fail( function(d, textStatus, error) {
/* I added this fail handler, just in case */
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
$twitterLink = $('a.twitter');
/* I removed the function here as it didn't seem necessary */
$twitterLink.each(function () {
$target = $(this);
/* Your function call here threw a syntax error.
Replaced `$target.function(twitterCount($target))` with `twitterCount($target)` */
twitterCount($target);
});