0

希望这将是一个简单的解决方案,但我自己似乎无法解决。

背景是我正在尝试创建一个网络应用程序,它将您所有的 Facebook 朋友放入 jQuery UI 自动完成中,并在您完成选择朋友并单击链接/按钮等时发布到他们的墙上。

我让一个朋友可以正常工作,但是要求已经改变(一如既往)以使多个朋友可以工作。

到目前为止,我已经与多个朋友一起工作,除了实际发布到用户朋友的墙上。

代码

我将尝试将其保留在与我认为如下问题相关的代码中:

我有一个隐藏的输入,我设法用 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 回答