1

У меня странная проблема. Мой Javascript код выбора мульти-другу прекрасно работает на моем локальном хосте, но когда я загрузить его в холст моей facebook приложение, он выдает ошибкуFacebook canvas: Uncaught TypeError: Не удается вызвать метод 'sort' of undefined

Uncaught TypeError: Cannot call method 'sort' of undefined 

в строке 81 all.js Когда я отладки с хромом инструменты разработчика на localhost, я вижу объект ответа, вызывающий метод сортировки, но в приложении facebook объект ответа является объектом ошибки. Что-то не так с моим javascript? ИЛИ какую-либо конкретную задачу выполнять во время загрузки в iframe на facebook ?.

Я загрузил библиотеки в следующем порядке:

<script src="/static/interface/js/jquery.min.js"></script> 
    <script src="http://connect.facebook.net/en_US/all.js"></script> 
     <script src="/static/interface/js/bootstrap.min.js"></script> 
     <script src="/static/interface/js/jquery.facebook.multifriend.select.js"></script> 
     <link rel="stylesheet" href="/static/interface/css/jquery.facebook.multifriend.select.css"/> 

А вот JavaScript код

<script> 


    FB.init({appId: '460948667348013', cookie: true}); 

    FB.getLoginStatus(function(response) { 
     if (response.session) { 
      init(); 
     } else { 
      // no user session available, someone you dont know 
     } 
    }); 

    function init() { 
     FB.api('/me', function(response) { 
      $("#username").html("<img src='https://graph.facebook.com/" + response.id + "/picture'/><div>" + response.name + "</div>"); 



      $("#jfmfs-container").jfmfs({ 
       max_selected: 15, 
       max_selected_message: "{0} of {1} selected", 
       friend_fields: "id,name,last_name", 
       pre_selected_friends: [1014025367], 
       exclude_friends: [1211122344, 610526078], 
       sorter: function(a, b) { 
       var x = a.last_name.toLowerCase(); 
       var y = b.last_name.toLowerCase(); 
       return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
       } 
      }); 
      $("#jfmfs-container").bind("jfmfs.friendload.finished", function() { 
       window.console && console.log("finished loading!"); 
      }); 
      $("#jfmfs-container").bind("jfmfs.selection.changed", function(e, data) { 
       window.console && console.log("changed", data); 
      });      

      $("#logged-out-status").hide(); 
      $("#show-friends").show(); 

     }); 
    }    



    $("#show-friends").live("click", function() { 
     var friendSelector = $("#jfmfs-container").data('jfmfs');    
     $("#selected-friends").html(friendSelector.getSelectedIds().join(', ')); 



    });     
    function sendRequest() { 
     var friendSelector = $("#jfmfs-container").data('jfmfs'); 
     var sendUIDs = friendSelector.getSelectedIds().join(', '); 
     // Use FB.ui to send the Request(s) 
     FB.ui({method: 'apprequests', 
     to: sendUIDs, 
     title: 'My Great Invite', 
     message: 'Check out this Awesome App!', 
     }, callback); 
    } 

    function callback(response) { 
     // alert('callback called'); 
     var friendSelector = $("#jfmfs-container").data('jfmfs'); 
     var sendUIDs = friendSelector.getSelectedIds().join(','); 
     var uids = sendUIDs.split(','); 
     var query = ''; 
     for(i=0;i<uids.length;i++){ 
     if(i==0){ 
      query = query + 'to[' + i + ']=' + uids[i]; 
     } 
     else{ 
     query = query + '&to[' + i + ']=' + uids[i]; 
     } 
     } 
     console.log(query); 
     if(response){ 
     // alert('successful'); 
     window.location.assign("/?"+ query) 
     } 
     else{ 
     alert('failure'); 
     } 

    } 
window.onload = function() { 
     init(); 
    }; 

    </script> 

ответ

0

если код вставляется в all.js, его мне кажется, что он должен появиться в конце списка тегов, так что у вас загружен FB api.

дополнительно, так как вы используете JQuery, почему использование

window.onload 

, когда вы можете использовать

$(document).ready(function() { 
    init(); 
}); 

?

В качестве альтернативы, вы уверены, что все остальные скрипты доступны по мере их импорта? (я предполагаю, что они есть, но не мешает проверять.)