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