2012-05-04 6 views
0

Надеюсь, это будет простое решение, но я не могу решить его самостоятельно.Борьба с JQuery .each() Функция

Фона Я пытаюсь создать веб-приложение, которое помещает всех своих друзей facebook в JQuery UI автозаполнения и сообщения к их стене, когда вы закончите выбор друзей и нажмите на кнопку/ссылку и т.д.

У меня была эта работа отлично для одного друга, но требования изменились (как всегда), чтобы сделать эту работу для нескольких друзей.

До сих пор у меня есть все, что работает с несколькими друзьями, за исключением случаев, когда дело доходит до фактической публикации на стенах друзей пользователя.

Код

Я буду стараться держать это в коде, имеющих отношение к вопросу, который я считаю, выглядит следующим образом:

У меня есть скрытые поля ввода, которым я управляю заселить с идентификаторами:

<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' }); 
}; 

Ошибка сообщает поджигатель является referee.each is not a function

Если вам потребуется дополнительная информация, пожалуйста, дайте мне знать.

ответ

2

Она нуждается в обертку JQuery, изменить:

referee.each(function() { 

To:

$(referee).each(function() { 
+0

ах ... спасибо. Новая ошибка, которая, как представляется, связана с частью Facebook. Благодаря! – martincarlin87

+0

Не забудьте указать свой вопрос как ответ @ martincarlin87;) – nyson

+0

@nyson - пришлось ждать 8 минут;) Спасибо всем, кто ответил. Ошибка теперь кажется, что строка на самом деле не разделена ... она пытается отправить сообщение в '12345, 567890' дважды вместо' 12345', затем '567890' ...... – martincarlin87

1

Вы можете использовать только each(), как вы на объект JQuery. Ваша referees переменная является массивом строк, так что вам нужно вызвать его из объекта базы $ JQuery и передать его в качестве параметра, например:

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

В качестве альтернативы вы можете обернуть переменную в объект JQuery, как это:

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

Вы должны назвать это так:

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

jQuery.each() необходим сбор в качестве первого параметра, то а callb ack.

Смежные вопросы