我在MVC应用程序中有一个局部视图,我想显示一个Facebook评论框。我还想在我的数据库中为用户发布的每条评论保存信息 - 是的,我知道它们在Facebook上也可见,但我需要将它们保存在数据库中。
为此,我编写了这段代码(注意:这是我在部分视图中的所有代码,我试图将其拆分为更具可读性。此外,正确插入了应用程序密钥。):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div id="fb-root">
</div>
<script type="text/javascript">
window.fbAsyncInit = function ()
{
FB.init({ appId: 'MY_APP_KEY', status: true, cookie: true, xfbml: true }); console.log('fb init');
FB.Event.subscribe('comment.create',
function (response)
{
console.log("comment created");
var commentQuery = FB.Data.query("SELECT text, fromid FROM comment WHERE post_fbid='" + response.commentID +
"' AND object_id IN (SELECT comments_fbid FROM link_stat WHERE url='" + response.href + "')");
var userQuery = FB.Data.query("SELECT name FROM user WHERE uid in (select fromid from {0})", commentQuery);
FB.Data.waitOn([commentQuery, userQuery], function ()
{
var commentRow = commentQuery.value[0];
var userRow = userQuery.value[0];
console.log(userRow.name + " (id: " + commentRow.fromid + ") posted the comment: " + commentRow.text);
trackcomments(response['commentID'], response['href'], 'create', commentRow.text, userRow.name, commentRow.fromid);
});
});
FB.Event.subscribe('comment.remove',
function (response)
{
console.log("comment removed");
trackcomments(response['commentID'], response['href'], 'remove', null, null, null);
});
};
(function ()
{
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js#xfbml=1';
e.async = true; document.getElementById('fb-root').appendChild(e);
} ()
);
trackcomments功能:
function trackcomments(_commentid, _address, _action,
_commentMessage, _userName, _userId)
{
$.ajax({
type: 'POST',
url: '/trackcomments',
data:
{
commentId: _commentid,
pageUrl: _address,
actionTaken: _action,
userName: _userName,
userId: _userId,
commentMessage: _commentMessage
},
success: function (result)
{
console.log("successfully received callback");
}
});
}
</script>
以及facebook评论标签,就在上面的代码下面:
<fb:comments notify="true" href="<%= Request.Url.ToString() %>" num_posts="3" width="630"></fb:comments>
问题在于每次发布(或删除)评论时,都不会触发这些功能。我看到的唯一控制台日志文本是“fb init”。显然,服务器上也没有任何事情发生。
过去两天我一直在摸不着头脑,但我似乎无法找到答案 - 我会非常感谢任何可以指引我朝正确方向前进的人。
谢谢!
答案 0 :(得分:1)
您应该将与FB。[...]函数(FB.init,FB.Event.suscribe,...)相关的所有内容放在
中window.fbAsyncInit = function(){
// Your code
});
否则你的代码将在FB js sdk完全加载之前被解析,你永远不会真正地对你的事件进行抄袭
答案 1 :(得分:0)
您需要确保添加notify="true"
标记,如果这不适合您,请确保您使用的是最新的fbComments插件。尝试添加migrated="1"
标记,如下所示,看看是否有帮助:
<fb:comments notify="true" migrated="1"></fb:comments>
答案 2 :(得分:0)
我今天遇到了同样的问题,并设法解决了这个问题。我的问题是我有2个不同的fbAsyncInit注册。一旦我将它们合并,我就开始接收评论通知。
获取评论通知时无需“notify = true”参数。
错误:
window.fbAsyncInit = function(){
// Init and Authenticate
});
window.fbAsyncInit = function(){
// Comment Event Subscribe.
});
右:
window.fbAsyncInit = function(){
// Init and Authenticate
// Comment Event Subscribe.
});