Как вызвать Ajax для запуска файла PHP с сохранением переменных PHP и Javascript - PullRequest
0 голосов
/ 03 июня 2010

Я использую 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.

Вау, это длинный пост.

Большое спасибо за ваше время.

1 Ответ

0 голосов
/ 03 июня 2010

Прежде всего, извините, если я вас неправильно понял,

Существует способ отправки данных через функцию загрузки:

$("#target").load("test.php", { 'choices[]': ["Jon", "Susan"] } );

или

    $("#target").load("test.php", {limit: 25}, function(){
   alert("The last 25 entries in the feed have been loaded");
 });

Надеюсь, это поможет ...

PS: для страницы вполне нормально тратить несколько секунд, чтобы ответить ... (я имею в виду только API FB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...