Я использую Facebook php-sdk , чтобы получить имя пользователя и друзей, сейчас загрузка друзей занимает около +3 секунд, поэтому я хотел сделать это через Ajax, например. Таким образом, документ может быть загружен, и jQuery затем вызывает внешний PHP-скрипт, который загружает друзей (их имена и фотографии в профилях). Итак, для этого я сделал:
$(document).ready(function() {
var loadUrl = "http://localhost/fb/getFriends.php" ;
$("#friends")
.html("Hold on, your friends are loading!")
.load(loadUrl);
});
Но я получаю ошибку PHP:
Fatal error: Call to a member function api() on a non-object
Если я делаю это в одном и том же PHP-файле (поэтому я вообще не использую Ajax для его вызова), он работает нормально.
Теперь я думаю, что понимаю причину, по которой это происходит, но я не знаю, как это исправить. В моем основном файле index.php у меня есть куча кода инициализации и сессии, например
FB.init({
appId : '<?php echo $facebook->getAppId(); ?>',
session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
Так что мне просто интересно, как лучше всего обработать мой новый отдельный PHP-файл getFriends.php таким образом, чтобы он имел доступ ко всем данным / переменным сеанса PHP / JavaScript?
Если вы не использовали Facebook php-sdk, я быстро объясню, что я имею в виду:
Допустим, у меня есть index.php и getUsername.php, из index.php я хочу получить файл getUsername.php через Ajax, используя .load. Теперь проблема в том, что getUsername.php необходим доступ к данным сеанса PHP / функциям инициализации Javascript, которые были созданы в index.php, поэтому я думаю о способах решения этой проблемы (я новичок в PHP, извините, если это звучит глупо), но Я думаю, может быть, я мог бы сделать POST в JQuery Ajax и опубликовать данные сеанса?
Или, может быть, я мог бы создать класс PHP, так что-то вроде:
class getUsername extends index{} /*Yes I'm a newbie*/
Если вы посмотрите на ссылку php-sdk example.php, размещенную вверху, возможно, вы лучше поймете, какие именно переменные должны быть доступны из нового файла.
Также на другом примечании, я использую PHP для определения времени рендеринга страницы, и кажется, что выборка имени пользователя выполняется только:
// Session based API call.
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
Может занять хорошие 4 секунды, это нормально? Как только я получу информацию о пользователях, хорошо ли это кэшировать или что-то в этом роде? -Скорость сейчас не так важна, сейчас я просто пытаюсь понять, что такое php-файлы, разделяющие Ajax.
Вау, это длинный пост.
Большое спасибо за ваше время.