How to call Ajax to run a PHP file while maintaining PHP & Javascript variables.
- by Umar
Hi Stackoverflowers.
I'm using the Facebook php-sdk to get the users name and friends, right now the loading friends part takes about +3 seconds so I wanted to do it via Ajax, e.g. so the document can load and jQuery then calls an external PHP script which loads the friends (their names and their profile pictures). So to do this I did:
$(document).ready(function() {
var loadUrl = "http://localhost/fb/getFriends.php" ;
$("#friends")
.html("Hold on, your friends are loading!")
.load(loadUrl);
});
But I get a PHP error:
Fatal error: Call to a member function api() on a non-object
If I do this in the same PHP file (so I don't use Ajax at all to call it) it works fine.
Now I think I understand the reason this is happening, but I don't know how to fix it. In my main index.php file I have a bunch of init and session code e.g.
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
});
So I'm just wondering what is the best way to treat my new separate PHP file getFriends.php in a way where it has access to all PHP/JavaScript session data/variables?
If you haven't used the Facebook php-sdk I'll quickly explain what I mean:
Lets say I have index.php and getUsername.php, from index.php I want to retrieve the getUsername.php file via Ajax using .load. Now the problem is getUsername.php needs to access PHP session data/Javascript Init functions which were created in index.php, so I'm thinking of ways to solve this (I'm new to PHP so sorry if this sounds silly) but I'm thinking maybe I could do a POST in jQuery Ajax and post the session data?
Or maybe I could create a PHP class, so something like:
class getUsername extends index{} /*Yes I'm a newbie*/
If you have a look at the php-sdk example.php link posted at the top maybe you'd better understand what variables exactly need to be accessed from a new file.
Also on a different note, I'm using PHP to work out page rendering times and it seems that fetching the users name alone :
// Session based API call.
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
Can take a good 4 seconds, is this normal? Once I get the users details is it good to cache it or something? -Speed isn't as important right now, for now I'm just trying to figure out this Ajax-separating php files thing.
Woah this is a long post.
Thanks very much for your time.