星空2020 2023-02-14 19:28 采纳率: 64.1%
浏览 43
已结题

layui form批量提交数据是ajax接收不到返回值

只提交一条数据的时候,可以正常接收到返回值,并弹窗提示“已成功下单!”,两条或以上就没有提示了,但是数据库是已经写入数据了的。
1,layui form批量提交数据是ajax接收不到返回值;
2,如何避免重复点击按钮后,重复提交数据;

 <form class="layui-form" action="" method="post" id="frm1" name="frm1">    
<div class="layui-form-item">           
                  <label for="L_email" class="layui-form-label">
                          <span class="x-red"></span>批量id</label>
                      <div class="layui-input-inline" style="width:440px">
                           <textarea id="ids" name="ids" autocomplete="off" class="layui-input" style="width:535px;" readonly ></textarea>        
                      </div>
     </div>
 <div class="layui-form-item">
                      <label for="L_repass" class="layui-form-label">
                      </label>
                      <button type="button" id="adddata" class="layui-btn" lay-submit lay-filter="add" >提交 </button>
                      <button type="reset" onclick="formReset()" class="layui-btn layui-btn-primary">重置</button>
                  </div>
</form>
<script>
//提交
        form.on('submit(add)', function(data){
            $.ajax({ 
                async : false,
                url:'./tijiao_do1.php',   
                method:'post',   
                data:data.field,    
                dataType:'JSON',
                /* beforeSend: function () {
                    // 禁用按钮防止重复提交
                    //$("#adddata").attr({ disabled: "disabled" });
                    $("#adddata").attr('disabled',true);
                    $("#adddata").val('正在提交中...');
                    }, */                
                success:function(res){   
                    if(res.code=='0'){   
                    layer.msg("已成功下单!",{icon: 1, time: 1000},function(){location.reload();}); //提交成功后刷新页面
                    }        
                    else      
                    alert(res.msg); 
                    $("#adddata").removeAttr("disabled");
                    },       
                    error:function (data) {
 
                    }     
            }); 
            return false;
        });
</script>
```php
tijiao_do1.php
<?php
  $location=$_POST['location'];
  $ids = $_POST['ids '];
require './connect_db.php';
  
  $ids =explode("\n",$ids );//分隔换行的数据,如果是逗号隔开的则用$sn=explode(',',$sn);
  //$ids =explode(PHP_EOL,$ids );//分隔换行的数据
  for($i=0;$i<count($ids );$i++)
  if(!empty(trim($ids [$i])))   //判断是否为空
   { 
   if (isset($_POST['location']) && $_POST["location"] == 'A') {
     $sql = "INSERT INTO sev_order (
  sn) VALUES (
  '$ids [$i]') ";   
   }else if(isset($_POST['location']) && $_POST["location"] == 'B') {
      $sql = "INSERT INTO sev_order (
  sn) VALUES (
  '$ids [$i]')"; 
   }else{
     $sql = "INSERT INTO sev_order (
  sn) VALUES (
  '$ids [$i]')";    
   }
   if($result = $conn->query($sql)){
        echo "{".'"code": 0,'.  '"msg": "发送成功"'."}";  //这个用来返回成功数据给layui
    }else{
      echo "失败"; $conn ->error;
    } 
   }
  ?>

```

  • 写回答

2条回答 默认 最新

  • 量化研究所 2023-02-14 20:09
    关注

    可能是因为在成功回调函数中只考虑了单条数据的情况,需要在提交多条数据后的回调函数中进行遍历处理。
    可以在按钮点击事件中添加禁用按钮代码,或者在成功回调函数中重新启用按钮。此外,也可以使用防抖函数或节流函数来防止多次提交。
    以下是可能的修改方案:

    修改成功回调函数,遍历处理多条数据

    success: function(res) {
        var successCount = 0;
        var failedCount = 0;
        for (var i = 0; i < res.length; i++) {
            if (res[i].code == '0') {
                successCount++;
            } else {
                failedCount++;
            }
        }
        if (successCount > 0) {
            layer.msg("成功提交" + successCount + "条数据", { icon: 1, time: 1000 }, function() { location.reload(); });
        }
        if (failedCount > 0) {
            alert("提交失败" + failedCount + "条数据");
        }
        $("#adddata").removeAttr("disabled");
    },
    
    
    

    修改 PHP 文件,将所有数据的结果都返回给前端:

    if ($result = $conn->query($sql)) {
        $success[] = array('code' => '0', 'msg' => '发送成功');
    } else {
        $failed[] = array('code' => '-1', 'msg' => '发送失败');
    }
    echo json_encode(array_merge($success, $failed));
    

    在按钮点击事件中添加禁用按钮代码

    $("#adddata").attr('disabled', true);
    $("#adddata").val('正在提交中...');
    
    

    使用防抖函数或节流函数来防止多次提交

    
    function debounce(func, wait) {
        var timeout;
        return function() {
            clearTimeout(timeout);
            var context = this,
                args = arguments;
            timeout = setTimeout(function() {
                func.apply(context, args);
            }, wait);
        };
    }
    var submitDebounce = debounce(function() {
        // 在这里写提交代码
    }, 1000);
    $("#adddata").click(function() {
        submitDebounce();
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 修改了问题 2月14日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: