如何使用Ajax将javascript数组与其他非数组数据一起发送到PHP脚本


How can I send a javascript array to a PHP script using Ajax along with other non-array data?

我有一个用户可以订购物品的网站。我目前正在向PHP脚本发送各种信息,以便它们可以从那里添加到数据库:

$.ajax ({
  type: "POST",
  url: "./pay.php",
  dataType: "json",
  data: {
    "firstName" : firstName,
    "lastName" : lastName,
    "email" : email,
    "price" : price
  }  
});

这个工作得很好。现在我想发送两个数组,其中包含订购产品的id和数量。因为我不知道在任何给定的点上有多少产品,也不知道它们的id是什么,所以我不能像上面那样将它们作为单独的项目添加。目前,我在单独的数组中有产品ID及其相应的数量,如:

productIds: ["6", "1"]
quantities: ["1", "4"]

我想将这些数组与其他变量一起发送到PHP脚本,以便我可以循环这些数组并将信息插入数据库。

我可以这样做吗?

$.ajax ({
      type: "POST",
      url: "./pay.php",
      dataType: "json",
      data: {
        "firstName" : firstName,
        "lastName" : lastName,
        "email" : email,
        "price" : price,
        "productIds" : productIds,
        "quantities" : quantities
      }  
 });

我目前能够像这样在PHP脚本中访问非数组变量:

$email = $_POST['email'];
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$price = $_POST['price'];

我想循环通过productIds数组在PHP脚本这样的东西,但我认为我错过了一些东西:

$i = 1;
foreach ($_POST['productIds'] as $value) {
  $sql = 'INSERT INTO orders SET
  product_id = "'.$_POST['productIds'][$i].'",
  quantity = "'.$_POST['quantities'][$i].'"';
  $result = $conn->query($sql);
  $i++;
}

如何将javascript数组发送到使用Ajax的PHP脚本以及其他非数组数据?

将数组传递给data参数

var productIds = ["6", "1"];
var quantities = ["1", "4"];
$.ajax ({
  type: "POST",
  url: "./pay.php",
  dataType: "json",
  data: {
    "firstName" : firstName,
    "lastName" : lastName,
    "email" : email,
    "price" : price,
    "productIds": productIds,
    "quantities": quantities
  }  
});

可以在收集表单数据时生成JavaScript对象。将该对象直接发送给PHP。像这样:

//Your object could look like this
var data = {
    name: 'blah',
    product_data: {
        '<some product id>': '<some product name>',
        '<another product id>': '<another product name>'
    }
}

在PHP端,您可以通过$_POST array中的键product_data访问作为关联数组的产品数据。现在由您来决定如何收集表单数据。

更新:

$products = $_POST['product_data'];
foreach($products as $product_id => $product_name){
    echo $product_id.', '.$product_name;
}

PHP将接受数组参数,但是你必须以可接受的形式发送参数

<?php
    $str = "first=value&arr[]=foo+bar&arr[]=baz";
    parse_str($str);
    echo $first;  // value
    echo $arr[0]; // foo bar
    echo $arr[1]; // baz
    parse_str($str, $output);
    echo $output['first'];  // value
    echo $output['arr'][0]; // foo bar
    echo $output['arr'][1]; // baz
?>

对于HTTP post,您可以简单地通过$_POST变量访问数组。

在JavaScript端,代码是这样的

$.post(url, {'arr[]': array}, function(data){
    // do something with received data
});