首先,我要感谢您花时间阅读我的帖子。
我正在尝试将Facebook Javascript SDK添加到网页中,当用户登录时,用户数据将使用php保存到mysql中。
我几乎可以弄清楚如何在 MYSQL 中插入 PHP 变量数据,但由于这是我第一次使用 Javascript 语言,所以我完全是新的:(
简而言之,我真正期待的是有人在一个简单的网页中向我展示以下内容:
1-网页启动并检查用户是否已登录Facebook以及用户是否登录了该应用程序(允许应用程序访问用户的基本个人资料信息和电子邮件)
2-如果用户未登录Facebook,则用户将被重定向到Facebook登录页面,或者如果用户尚未授予应用程序权限,则会要求必要的权限。
3-如果用户通过了前两个阶段(用户成功连接),页面将显示以下消息"您好亲爱的$User_Facebook_Name"。
$User_Facebook_Name 是 Javascript 从 Facebook Javascript SDK 传递的 PHP 变量
我不想使用提交按钮将Javascript变量传递给PHP(网站页面不刷新)。
我更喜欢使用Facebook Javascript SDK,PHP,Jquery(Ajax)来解决这个问题。
到目前为止,我有以下代码,页面显示消息,但使用Facebook Javascript SDK,如下所示:
FB.api(uid, function(info) {
$('#welcome').html("你好亲爱的" + info.name );
索引.php
<html>
<head>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="js/myscript.js"></script>
</head>
<body>
<div id="fb-root"></div>
Hello dear <?php> echo "$user_Facebook_Name"; ?>
</body>
</html>
我的脚本.js
window.fbAsyncInit = function() {
FB.init({
appId : 'App_ID',
xfbml : true,
version : 'v2.1'
});
//Next, find out if the user is logged in
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
// the user is logged in and has authenticated your
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
FB.api(uid, function(info) {
$('#welcome').html("Hello dear " + info.name );
});
} else if (response.status === 'not_authorized') {
// the user is logged into Facebook,
// but has not authenticated your app
var oauth_url = 'https://www.facebook.com/dialog/oauth/';
oauth_url += '?client_id=App_ID'; //Your Client ID
oauth_url += '&redirect_uri=' + 'http://website.com/'; //Send them here if they're not logged in
oauth_url += '&scope=email,user_friends';
window.top.location = oauth_url;
} else {
// the user isn't logged in to Facebook.
} //Response.status
}); // Get login status
}; //FB Async
// Load the JavaScript SDK Asynchronously
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
任何帮助将不胜感激,并想提前感谢您。
我不是 100% 确定我理解你的问题,但你的意思似乎是,一旦你到了想要将某些东西提交回服务器(PHP 代码)的点,你想通过 jQuery 的 $.ajax() 方法异步完成?如果是这样,您仍然可以在不刷新页面的情况下使用提交按钮。只需将事件侦听器连接到按钮,即可在单击按钮时发出 AJAX 请求
.HTML:
<form id="theForm">
<input type="text" id="textBox" name="textBox" value="textBox" />
<input type="text" id="userName" name="userName" value="userName" />
<input type="button" id="submitBtn" value="Submit" />
</form>
.JS:
$('#submitBtn').on('click', function() {
var formData = $('#theForm').serialize();
$.ajax({
url: 'something.php',
data: formData,
success: function (data) {},
error: function() {}
})
});
更好的是,如果您希望将数据序列化为对象数组而不是查询字符串,则可以改用.serializeArray()
。但是 PHP 应该能够从查询字符串中读取所有值,只要您有与表单元素关联的名称。然后,您从 PHP 发回的任何内容都将包含在成功函数的数据变量中。这一切都将在不刷新页面的情况下执行。
如果你根本不想使用按钮,我想你可以使用 setTimeout(),这样它就会每 X 毫秒发送一个 AJAX 请求,或者以某种方式检查你的页面上是否进行了更改,但这可能会变得非常复杂。我会说在这一点上保持简单。
编辑:从您的评论中获得更多信息后,答案甚至比上面更简单。不过,您所做的只是在FB.api()
函数中发出 AJAX 请求:
FB.api(uid, function(info) {
$('#welcome').html("Hello dear " + info.name );
$.ajax({
url: 'something.php',
data: info,
success: ... ,
error: ...
});
});
从那里,您只需从 PHP 中的表单变量中获取变量。我的PHP有点生疏,但我相信它会像$_POST["info"]
一样。尝试在不刷新页面的情况下重新显示它是完全没有意义的,因为页面中已经有变量。将用户名发送到服务器的唯一要点是将其保存在数据库中。您已经通过 API 在页面上显示它。