javascript - Ajax 请求每次都重复
问题描述
我在我的表单中有多个 ajax 请求,例如我在我的表单中为产品添加了大小按钮当用户单击它时它会插入一个大小的输入元素所以我的问题是我的表单上有 sku 生成器它的作用如果指定了尺寸,将为我的产品生成带有颜色名称和尺寸的 sku 问题是每次重复的 ajax 请求意味着
两个字段的js代码
$(document).on('click', '.btn_size', function() {
let size = $(this).val();
$.ajax({
url: "../app/ajax/ajax.php",
method: "post",
data: {
size: size
},
cache: false,
success: function(data) {
let data2 = $.parseJSON(data);
if (data2.success !== '') {
$('.size_wrapper').html(data2.success);
}
}
});
});
$(document).on("click", ".generate_sku", function() {
let $id = $(this).attr("data-id");
let $form = document.getElementById('product_form');
let generateSku = $(this).val();
let formData = new FormData($form);
formData.append('id', $id);
formData.append('generate_sku', generateSku);
$.ajax({
url: "../app/ajax/ajax.php",
method: "post",
data: formData,
success: function(data3) {
console.log(data3);
// let data2 = $.parseJSON(data);
// if (data2.success !== '') {
// $("#sku" + $id).val(data2.success);
// manageErrors();
// }
// if (data2.error !== '') {
// $.each(data2.error, function(index, element) {
// $("#product_form").find("input[name='" + index + "']").addClass("form_error");
// $("#product_form").find("input[name='" + index + "']").next(".error").html(element);
// });
// }
},
contentType: false,
cache: false,
processData: false
});
});
两个字段的php代码
if(isset($_POST['size']))
{
$size = new SizeClass();
$allSizes = $size->showAll();
$data = "<div class='form-group'><label for='size'>Size</label>
<select class='form-control' id='size' name='size'><option
value=''>Select</option>";
while($row = $allSizes->fetch(PDO::FETCH_ASSOC))
{
$sizeName = $row['size_name'];
$sizeId = $row['size_id'];
$data .= "<option value='$sizeId'>$sizeName</option>";
}
$data .= "</select></div>";
$data .= "<div class='form-group'><label for='size_price'>Size
Price</label><input type='text' class='form-control' name='size_price'
placeholder='If this size has different price add here'
id='size_price'></div>";
echo json_encode(["success" => $data]);
}
if(isset($_POST['generate_sku']))
{
if(!empty($_POST['size']))
{
$id = $_POST['id'];
if(!empty($_POST["color_name$id"]))
{
$size = new SizeClass();
$sizeFind = $size->find($_POST['size']);
$row = $sizeFind->fetch(PDO::FETCH_ASSOC);
$size = str_split($row['size_name']);
$sizeName = '';
for ($i = 0; $i <= 2; $i++) {
$sizeName .= $size[$i];
}
$color = str_split($_POST["color_name$id"]);
$colorName = "";
for ($i = 0; $i < 2; $i++) {
$colorName .= $color[$i];
}
$randomid = mt_rand(1000, 9999);
$sku = $sizeName . "-" . $colorName . "-" . $randomid;
echo json_encode(["success" => $sku]);
}
else
{
$error = [];
$error["color_name$id"] = "Color name must be required";
echo json_encode(["error" => $error]);
}
}
else
{
$id = $_POST['id'];
if(!empty($_POST["color_name$id"]))
{
$color = str_split($_POST["color_name$id"]);
$colorName = "";
for ($i = 0; $i < 2; $i++) {
$colorName .= $color[$i];
}
$randomid = mt_rand(1000, 9999);
$colorName .= "-" . $randomid;
echo json_encode(["success" => $colorName]);
}
else
{
$error = [];
$error["color_name$id"] = "Color name must be required";
echo json_encode(["error" => $error]);
}
}
}
预期输出是针对一个请求,这将返回 2 个请求,不知道为什么
意味着它正在返回
{"success":"<div class='form-group'><label for='size'>Size<\/label>
<select class='form-control' id='size' name='size'><option
value=''>Select<\/option><option value='1'>Xl<\/option><option
value='2'>Medium<\/option><option value='3'>Small<\/option><\/select>
<\/div><div class='form-group'><label for='size_price'>Size
Price<\/label><input type='text' class='form-control' name='size_price'
placeholder='If this size has different price add here' id='size_price'>
<\/div>"}{"error":{"color_name1":"Color name must be required"}}
预期结果
{"error":{"color_name1":"Color name must be required"}}
调试详细是这里
当我 console.log(data) 答案是
{"success":"<div class='form-group'><label for='size'>Size<\/label><select class='form-control' id='size' name='size'><option value=''>Select<\/option><option value='1'>Xl<\/option><option value='2'>Medium<\/option><option value='3'>Small<\/option><\/select><\/div><div class='form-group'><label for='size_price'>Size Price<\/label><input type='text' class='form-control' name='size_price' placeholder='If this size has different price add here' id='size_price'><\/div>"}{"error":{"color_name1":"Color name must be required"}}
在网络选项卡 2 请求中
both are from same file
one for size
success: "<div class='form-group'><label for='size'>Size</label><select class='form-control' id='size' name='size'><option value=''>Select</option><option value='1'>Xl</option><option value='2'>Medium</option><option value='3'>Small</option></select></div><div class='form-group'><label for='size_price'>Size Price</label><input type='text' class='form-control' name='size_price' placeholder='If this size has different price add here' id='size_price'></div>"
2nd for color
but it is repeating size request
{"success":"<div class='form-group'><label for='size'>Size<\/label><select class='form-control' id='size' name='size'><option value=''>Select<\/option><option value='1'>Xl<\/option><option value='2'>Medium<\/option><option value='3'>Small<\/option><\/select><\/div><div class='form-group'><label for='size_price'>Size Price<\/label><input type='text' class='form-control' name='size_price' placeholder='If this size has different price add here' id='size_price'><\/div>"}{"error":{"color_name1":"Color name must be required"}}
我希望现在你们明白我想问的问题
解决方案
尝试将第一个条件“if(isset($_POST['size']))”更改为另一个条件,因为此条件始终为真。
推荐阅读
- c - 如何修改服务器/客户端以将端口号和/或主机作为可选的命令行参数?
- gatling - 加特林有可能进行分支旅行吗
- google-bigquery - 使用 Bigquery 进行网络分析,如何过滤掉恶意的不良数据,如机器人等
- javascript - 如何解决未从 Post 请求中获得文本响应的问题
- javascript - ReactJS:更新嵌套状态对象属性而不使用 setState() 替换整个对象
- ruby-on-rails - Problem making bundle install in the console when i change from ruby 2.3.7 to ruby 2.5
- spring - javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType
- sql - combine multiple rows into a single row with repeating set of columns
- php - 如何在 CHROOT 时使用 Nginx + PHP-FPM 配置 Symfony 4
- google-apps-script - Can't authorise Google script