1

我有一个用户可以订购商品的网站。我目前正在向 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'];

我想在 PHP 脚本中像这样循环遍历 productIds 数组,但我想我遗漏了一些东西:

$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++;
}

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

4

3 回答 3

2

只需将数组传递给 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
  }  
});
于 2013-04-14T02:05:18.167 回答
1

您可以在收集表单数据时立即形成一个 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>'
    }
}

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

更新:

$products = $_POST['product_data'];
foreach($products as $product_id => $product_name){
    echo $product_id.', '.$product_name;
}
于 2013-04-14T02:09:39.633 回答
0

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变量访问数组。

在 JavaScript 方面,代码是这样的,

$.post(url, {'arr[]': array}, function(data){
    // do something with received data
});
于 2013-04-14T02:08:40.603 回答