2011-09-12 13 views
0

私は、MVCアプリケーションでFacebookのコメントボックスを表示したい部分的なビューを持っています。また、ユーザーが投稿したコメントごとにデータベースに情報を保存したいと思います。はい、私はFacebookでも表示されていますが、データベースに保存する必要があります。FB.Event.subscribeを介してcomment.createまたはcomment.removeに登録されたメソッドはトリガーされません

このコードを書きました(注意:これは私が部分的に見たコードです。読みやすくするために分割しました。また、正しく挿入されています)。

ただ、上記のコード以下

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のコメントタグ:

<%@ 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機能

<fb:comments notify="true" href="<%= Request.Url.ToString() %>" num_posts="3" width="630"></fb:comments> 

問題は、コメントが投稿(または削除)されるたびに、関数がトリガしないことです。私が見るコンソールログの唯一のテキストは "fb init"です。明らかに、サーバ上でも何も起こりません。

私は過去2日間私の頭を掻いてきましたが、私は答えを見つけられないようです - 私は正しい方向に私を向けることができる人にはとても感謝しています。

ありがとうございました!

答えて

1

あなたはFBに関連するすべてのものを置く必要があります。[...]機能(FB.init、FB.Event.suscribe、...)

window.fbAsyncInit = function(){ 
    // Your code 
}); 

にそうしないと、あなたのコードは、FBの前に解析されますjs sdkが完全にロードされていて、実際にあなたのイベントに決して拘束されることはありません

+0

FBコードがwindow.fbAsyncInitブロックにすでにある... –

+0

うーん何の問題私の悪い申し訳ありませんが、アイデアそうです。 2 FB.initが同じページでトリガーされたイベント、良いインスタンスに送信されなかったイベントなどがありましたが、ここで原因とは思われません。 – Olivier

0

notify="true"タグを必ず追加する必要があります。それが機能しない場合は、最新のfbCommentsプラグインを使用していることを確認してください。以下のようにmigrated="1"タグを追加してみてください、そしてこのことができますかどうかを確認:

<fb:comments notify="true" migrated="1"></fb:comments> 
+0

notify = "true"すでに移行され、移行された= "1"は役に立たなかった –

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. 
}); 
関連する問題