将 AJAX 的 Facebook Graph API 响应的数组发布到 PHP 脚本
POSTing an Array from a Facebook Graph API response by AJAX to a PHP script
Hello_I 正在制作一个 Facebook Canvas 应用程序,我正在尝试让邀请好友流程正常运行。我制作了我的多朋友选择器,它可以正确发送邀请,但我现在想在受邀者添加应用程序时奖励邀请者。
我认为正确的做法是 运行 在新用户开始使用该应用程序时进行检查。我正在尝试通过查询 Facebook 的图表 API 来查看新用户是否对我的应用程序有 apprequest
,如果有,那么我想找出的 ID(或多个 ID) person/people 向该新用户发送了邀请请求。[=20=]
为了弄清楚如何做到这一点,我向一个帐户发送了 3 个邀请(来自 3 个不同的帐户),现在如果我以邀请接收者身份登录,然后查询 Facebook 的图表 API使用此代码控制台:/v2.3/me/apprequests?fields=from,id
it returns this:
{"data": [
{
"from": {
"id": "1234526161534",
"name": "John Doe"
},
"id": "14677152342565_827362417384",
"created_time": "2015-05-19T21:35:11+0000"
},
{
"from": {
"id": "4777221325314",
"name": "Jane Doe"
},
"id": "1683273626362_827362417384",
"created_time": "2015-05-19T20:50:14+0000"
},
{
"from": {
"id": "1015521200905293",
"name": "Di Do"
},
"id": "1251333932735_827362417384",
"created_time": "2015-05-19T20:50:08+0000"
}
]}
所以它告诉我有 3 个不同的人向我发送了 apprequests
应用程序。它为我提供了他们的 ID、姓名以及与受邀者 ID 串联的唯一请求 ID。
目前,我可以单独获取发件人 ID,但我想通过 AJAX 将它们作为数组发送到 PHP 脚本,然后我想将它们插入到如果可能的话,我的数据库使用 PDO 准备语句。
这是我当前的代码:
/* making the API call */
FB.api(
'me/apprequests?fields=from,id',
function (response) {
if (response && !response.error) {
var requestid = response.data[0].from.id;
var requestid1 = response.data[1].from.id;
var requestid2 = response.data[2].from.id;
console.log(response.data[0].from.id);
console.log(response.data[1].from.id);
console.log(response.data[2].from.id);
$.ajax({
url: 'reward.php',
data: {'requestid' : requestid,
'requestid1' : requestid1,
'requestid2' : requestid2},
type: "POST",
success: function(response){
if(response==1){
alert("Reward Applied!");
}
else{
alert("Reward Failed!");
}
}
});
}
}
);
虽然我可以将 ID 作为单独的变量 var requestid, var requestid1, var requestid2
发送到 PHP 文件,然后单独插入它们,但这不是一个好方法,因为请求的数量ID 会有所不同,因此我认为我需要将它们作为数组发送,而不是将它们作为单独的变量发送,但我不确定如何执行此操作。
我当前的 PDO 插入事务是这样的:
reward.php
<?php
$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
// Defining the three request IDs
$requestid = $_POST['requestid'];
$requestid1 = $_POST['requestid1'];
$requestid2 = $_POST['requestid2'];
// Insert first request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid)");
$stmt->bindParam(':requestid', $requestid);
$requestid = $_POST['requestid'];
$stmt->execute();
// Insert second request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid1)");
$stmt->bindParam(':requestid1', $requestid1);
$requestid = $_POST['requestid1'];
$stmt->execute();
// Insert third request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid2)");
$stmt->bindParam(':requestid2', $requestid2);
$requestid = $_POST['requestid2'];
$stmt->execute();
$conn->commit();
echo "1";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
如果一个人有超过 3 个人的请求,这将不起作用,它确实需要是一个数组。我对 PDO 和事务还很陌生,没有任何使用数组的经验。
我非常感谢任何对此的帮助,在此先感谢!
是的,您没有正确发送数据。
试试这个
data: {'senderid' : response.data.from.id}
@Emily 关于你更新的问题,很容易实现。像这样将数组本身传递给 ajax post
$.ajax({
url: 'reward.php',
data: {'requestids' : response.data},
type: "POST",
success: function(response){
if(response==1){
alert("Reward Applied!");
}
else{
alert("Reward Failed!");
}
}
});
}
}
然后在您的 PHP 中循环遍历 requestids 数组并生成 mysql 查询以像这样一次插入所有记录
$sql= "INSERT INTO requestids (requestid) VALUES ";
foreach($_POST['requestids'] as $requestId){
$sql.="($requestId)";
}
我相信您可以轻松地将这个简单的查询转换为 PDO 语句
Hello_I 正在制作一个 Facebook Canvas 应用程序,我正在尝试让邀请好友流程正常运行。我制作了我的多朋友选择器,它可以正确发送邀请,但我现在想在受邀者添加应用程序时奖励邀请者。
我认为正确的做法是 运行 在新用户开始使用该应用程序时进行检查。我正在尝试通过查询 Facebook 的图表 API 来查看新用户是否对我的应用程序有 apprequest
,如果有,那么我想找出的 ID(或多个 ID) person/people 向该新用户发送了邀请请求。[=20=]
为了弄清楚如何做到这一点,我向一个帐户发送了 3 个邀请(来自 3 个不同的帐户),现在如果我以邀请接收者身份登录,然后查询 Facebook 的图表 API使用此代码控制台:/v2.3/me/apprequests?fields=from,id
it returns this:
{"data": [
{
"from": {
"id": "1234526161534",
"name": "John Doe"
},
"id": "14677152342565_827362417384",
"created_time": "2015-05-19T21:35:11+0000"
},
{
"from": {
"id": "4777221325314",
"name": "Jane Doe"
},
"id": "1683273626362_827362417384",
"created_time": "2015-05-19T20:50:14+0000"
},
{
"from": {
"id": "1015521200905293",
"name": "Di Do"
},
"id": "1251333932735_827362417384",
"created_time": "2015-05-19T20:50:08+0000"
}
]}
所以它告诉我有 3 个不同的人向我发送了 apprequests
应用程序。它为我提供了他们的 ID、姓名以及与受邀者 ID 串联的唯一请求 ID。
目前,我可以单独获取发件人 ID,但我想通过 AJAX 将它们作为数组发送到 PHP 脚本,然后我想将它们插入到如果可能的话,我的数据库使用 PDO 准备语句。
这是我当前的代码:
/* making the API call */
FB.api(
'me/apprequests?fields=from,id',
function (response) {
if (response && !response.error) {
var requestid = response.data[0].from.id;
var requestid1 = response.data[1].from.id;
var requestid2 = response.data[2].from.id;
console.log(response.data[0].from.id);
console.log(response.data[1].from.id);
console.log(response.data[2].from.id);
$.ajax({
url: 'reward.php',
data: {'requestid' : requestid,
'requestid1' : requestid1,
'requestid2' : requestid2},
type: "POST",
success: function(response){
if(response==1){
alert("Reward Applied!");
}
else{
alert("Reward Failed!");
}
}
});
}
}
);
虽然我可以将 ID 作为单独的变量 var requestid, var requestid1, var requestid2
发送到 PHP 文件,然后单独插入它们,但这不是一个好方法,因为请求的数量ID 会有所不同,因此我认为我需要将它们作为数组发送,而不是将它们作为单独的变量发送,但我不确定如何执行此操作。
我当前的 PDO 插入事务是这样的:
reward.php
<?php
$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
// Defining the three request IDs
$requestid = $_POST['requestid'];
$requestid1 = $_POST['requestid1'];
$requestid2 = $_POST['requestid2'];
// Insert first request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid)");
$stmt->bindParam(':requestid', $requestid);
$requestid = $_POST['requestid'];
$stmt->execute();
// Insert second request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid1)");
$stmt->bindParam(':requestid1', $requestid1);
$requestid = $_POST['requestid1'];
$stmt->execute();
// Insert third request ID
$stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid2)");
$stmt->bindParam(':requestid2', $requestid2);
$requestid = $_POST['requestid2'];
$stmt->execute();
$conn->commit();
echo "1";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
如果一个人有超过 3 个人的请求,这将不起作用,它确实需要是一个数组。我对 PDO 和事务还很陌生,没有任何使用数组的经验。 我非常感谢任何对此的帮助,在此先感谢!
是的,您没有正确发送数据。
试试这个
data: {'senderid' : response.data.from.id}
@Emily 关于你更新的问题,很容易实现。像这样将数组本身传递给 ajax post
$.ajax({
url: 'reward.php',
data: {'requestids' : response.data},
type: "POST",
success: function(response){
if(response==1){
alert("Reward Applied!");
}
else{
alert("Reward Failed!");
}
}
});
}
}
然后在您的 PHP 中循环遍历 requestids 数组并生成 mysql 查询以像这样一次插入所有记录
$sql= "INSERT INTO requestids (requestid) VALUES ";
foreach($_POST['requestids'] as $requestId){
$sql.="($requestId)";
}
我相信您可以轻松地将这个简单的查询转换为 PDO 语句