javascript - 发送给 ajax 的值不会改变
问题描述
我有一个 html 打印出多个表单,其中包含数据库中保存的值/标签
<?php
$stmt = $conn->prepare("SELECT * FROM product");
if ($stmt->execute()){
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()){
?>
<div class="col-xl-3 col-md-4 mb-4">
<div class="card border-bottom-secondary h-100">
<div class="embed-responsive embed-responsive-16by9">
<img src="img/<?php echo $img_src; ?>" alt="" class="card-img-top embed-responsive-item">
</div>
<div class="card-body">
<form>
<div>
<h4 class="text-primary"><?php echo $row['name']; ?></h4>
</div>
<div>
<input type="text" id="name" name="name" value="<?php echo $row['name']; ?>" hidden>
<label for="quantity">Qty. </label>
<input class="w-25" onclick="this.select();" min="1" name="quantity" value="1" type="number" id="quantity">
<button type="button" id="save" onclick="saveTemp()">Add</button>
</div>
</form>
</div>
</div>
</div>
<?php
}
}
?>
现在这是我的 saveTemp() 函数,它将它存储在数据库中:
function saveTemp() {
var productName = $('#name').val();
var quantity = $('#quantity').val();
//console.log(productName);
//console.log(quantity);
$.ajax({
type: "POST",
url: "purchase.php",
data: {
product: productName,
quantity: quantity
},
success: function(){
alert('success');
}
});
return false;
}
问题是,每当我单击要发送的不同表单时,productName 和 quantity 中的值都不会改变。它们仍然包含第一个打印表单的值。
例子:
假设第一张卡片包含薯条,下一张卡片包含汉堡,即使我点击汉堡上的添加按钮,数据库中插入的值仍然是薯条及其数量,而不是汉堡。
PS。如果有帮助,这是我的简单 purchase.php 脚本。谢谢!
<?php
include_once('connect.php');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$product = $_POST['product'];
$quantity = $_POST['quantity'];
$insert = $conn->prepare("INSERT INTO cart (name, quantity) VALUES (?,?)");
$insert->bind_param("si", $product, $quantity);
$insert->execute();
$insert->close();
}
解决方案
您可以使用单独的表单 ID,如下所示...
看法
<?php
$stmt = $conn->prepare("SELECT * FROM product");
if ($stmt->execute()){
$result = $stmt->get_result();
$i = 1; // added
while ($row = $result->fetch_assoc()){
?>
<div class="col-xl-3 col-md-4 mb-4">
<div class="card border-bottom-secondary h-100">
<div class="embed-responsive embed-responsive-16by9">
<img src="img/<?php echo $img_src; ?>" alt="" class="card-img-top embed-responsive-item">
</div>
<div class="card-body">
<form id="saveform<?=$i?>"> <!-- form id added -->
<div>
<h4 class="text-primary"><?php echo $row['name']; ?></h4>
</div>
<div>
<input type="text" id="name" name="name" value="<?php echo $row['name']; ?>" hidden>
<label for="quantity">Qty. </label>
<input class="w-25" onclick="this.select();" min="1" name="quantity" value="1" type="number" id="quantity">
<button type="button" id="save" onclick="saveTemp(this)">Add</button> <!-- pass 'this' from here-->
</div>
</form>
</div>
</div>
</div>
<?php
$i++; //incremented here
}
}
?>
在您的脚本中进行更改...
js
function saveTemp(these) {
var formId = $(these).closest("form").attr("id"); // get form id here
var productName = $('#'+formId+' #name').val(); // assigned form id here
var quantity = $('#'+formId+' #quantity').val(); // assigned form id here
//console.log(productName);
//console.log(quantity);
$.ajax({
type: "POST",
url: "purchase.php",
data: {
product: productName,
quantity: quantity
},
success: function(){
alert('success');
}
});
return false;
}
推荐阅读
- c# - ASP.NET Razor 页面 - 条件重定向
- c# - 获取文件夹中具有特定扩展名的第一个文件
- django - 比较不同模型的实例 - Django REST Framework
- css - 如何在网格中列的间隙区域内绘制分隔线
- loopbackjs - Loopback:隐藏某些用户角色的一些属性
- python-3.x - 递归返回子集 - Python
- javascript - 如何使用 jquery setTime?
- excel - str(1)在excel vba前面带有空格返回
- excel - 查找仅包含最后一行的第一个单元格的范围?
- firebase - 如何在firestore中删除具有特定值的多个文档