0

うまくいけば、これは簡単な解決策になるでしょうが、私はそれを自分で解決することはできないようです。

背景は、Facebookのすべての友達をjQuery UIオートコンプリートに入れ、友達の選択が終了してリンク/ボタンなどをクリックしたときに壁に投稿するWebアプリを作成しようとしています。

私はこれを1人の友人に対しては正常に機能させましたが、複数の友人に対してこれを機能させるために要件が(相変わらず)変更されました。

これまでのところ、ユーザーの友達の壁に実際に投稿する場合を除いて、すべてが複数の友達と連携しています。

コード

私はこれを次のように私が信じる質問に関連するコードに保つように努めます:

IDを入力するための非表示の入力があります。

<input id="fbid" type="hidden" value="12345, 567890, ">

次に、リンクをクリックして友達の壁に投稿したときに実行されるjQuery関数があります。

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
    FB.init({
        appId      : '12345678', // App ID
        channelUrl : '/channel.html', // Channel File
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        oauth      : true, // enable OAuth 2.0
        xfbml      : true  // parse XFBML
    });

    // Additional initialization code here

    FB.login(function(response)
    {
        if (response.authResponse)
        {                                               
            $("#send-voucher").click(function() {

                // Post message to friend's wall

                var opts = {
                    message : 'This is the message',
                    name : 'This is the name',
                    link : 'http://www.opticalexpress.co.uk',
                    description : 'This is the description',
                    picture : '/voucher_valid.png'
                };

                var referees = $("#fbid").val();

                // remove last comma and space from the end of the string
                referees = $.trim(referees);
                referees = referees.substring(0, referees.length - 1);

                var referee = referees.split(', '); // comma space
                referee.each(function() {

                    FB.api('/'+ referee +'/feed', 'post', opts, function(response)
                    {
                        if (!response || response.error)
                        {
                            alert('Posting error occured');
                        }
                        else
                        {
                            alert('Success - Post ID: ' + response.id);
                            $("#send-voucher").hide();
                            $("#voucher-sent").fadeIn('slow');
                        }
                    });
                });
            });
        }
        else
        {
            alert('Not logged in');
        }
    }, { scope : 'publish_stream' });
};

firebugによって報告されたエラーはreferee.each is not a function

さらに詳しい情報が必要な場合は、お知らせください。

4

3 に答える 3

2

jQuery ラッパーが必要です。これを変更します。

referee.each(function() {

に:

$(referee).each(function() {
于 2012-05-04T10:52:32.037 に答える
1

each()jQuery オブジェクトでそのまま使用することしかできません。変数refereesは文字列の配列であるため、ベース$jQuery オブジェクトから呼び出して、次のようにパラメーターとして渡す必要があります。

$.each(referee, function() {
    // ...
} 

または、次のように変数を jQuery オブジェクトでラップすることもできます。

$(referee).each(function() {
    // ...
}
于 2012-05-04T10:53:46.853 に答える
1

次のように呼び出す必要があります。

$.each(referee, function() { ... });

jQuery.each() は、最初のパラメーターとしてコレクションを必要とし、次にコールバック関数を必要とします。

于 2012-05-04T10:56:18.590 に答える