使用 JQUERY Ajax 将 JavaScript 值传递给 PHP(值来自 Facebook Javascript


Pass JavaScript value to PHP using JQUERY Ajax (Values are from Facebook Javascript SDK)

首先,我要感谢您花时间阅读我的帖子。

我正在尝试将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 在页面上显示它。