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

时间:2013-04-14 01:59:52

标签: php javascript jquery ajax

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

3 个答案:

答案 0 :(得分:2)

只需将数组传递给数据参数

即可
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
  }  
});

答案 1 :(得分: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>'
    }
}

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

<强>更新

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

答案 2 :(得分: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
});