【问题标题】:Error all products are updated when modifying the input field错误所有产品在修改输入字段时更新
【发布时间】:2022-11-17 17:17:07
【问题描述】:

我有几个输入字段,允许我添加或更新添加到购物车的产品的折扣:

<div class="bsk-dto">
    <input type="text" name="dtoupdate[3][Normal][Normal][Normal][1][%]" value="3" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>
<div class="bsk-dto">
    <input type="text" name="dtoupdate[6][Normal][Normal][Normal][1][%]" value="1" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>
<div class="bsk-dto">
    <input type="text" name="dtoupdate[10][Normal][Normal][Normal][1][%]" value="0" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>

此数据是根据添加到购物车的项目生成的:

我在我的 ajax 代码中添加了 $this 属性,这样当其中一些被修改时,它只会更新正在修改的输入字段,但不幸的是它对我不起作用,如果我修改其中一个输入字段,所有其中有修改。

$(function() {
    $(document).on('input', '.dto', function(e){
        e.preventDefault();
        $this = $(this);
        var formData = [];
        $('input[name^="dtoupdate"]').each(function() {
            formData.push(this.value);
        });

        var formData = $(this).serializeArray();

        var url = "update_cart.ini.php";

        $.ajax({
            url: url,
            type: "POST",
            data: formData,
            cache: false,
        })
        .done(function(data) {
            let res = JSON.parse(data);
            if(res.status){
                $('.alert-success').fadeIn();
                $('.alert-success').html(res.message).delay(2000).fadeOut(2000);
            } else {
                $('.alert-danger').fadeIn();
                $('.alert-danger').html(res.message).delay(2000).fadeOut(2000);
            }
        })
        .fail(function( jqXHR, textStatus ) {
            /*alert("Ajax Request fail");
            console.log(jqXHR.responseText);
            console.log("Request failed: " + textStatus );*/
        })
    });
});

我应该做哪些更改,以便它只更新正在修改的输入中的数据?

【问题讨论】:

  • 你尝试过什么来解决这个问题?你卡在哪儿了?您是否检查过是否仅使用这些 ID 发送了请求?
  • @NicoHaase 如果发送了朋友,问题是它发送的是所有输入,而不是我正在修改的特定输入
  • 您用完整的表单覆盖 formData(不是 FormData 对象)。你可能想要const arrayOfValues = $('input[name^="dtoupdate"]').map(function() { return this.value }).get();
  • @mplungjan 我必须消除所有formDataajax 朋友的data: formData, 会怎样?

标签: jquery ajax


【解决方案1】:

试试这个只发送一个字段

const field = {}; 
field[this.name] = this.value; 

$.ajax({
  url: url,
  methodd: "POST",
  data: field,

【讨论】:

  • 这将向我发送此信息{name: 'dtoupdate[1301][Normal][Normal][Normal][1][%]', value: '1'},因为在前面的示例中您在评论中给我我没有看到它发送此类信息我在输入字段中有什么?
猜你喜欢
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多