将 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 语句