form.submit();之后紧接着window.parent.close(); submit方法提交失败!

360 阅读1分钟

背景

几年前的sring-web项目代码,出现了较为诡异的灵异事件。用户反映修改功能提示成功但实际数据并未发生改变。(且隔了一段时间出现了相同的问题,最后定位原因还是如此,踩了同一个坑两次,特此记录)

问题代码

// 这两行便是主要问题代码
mainFrame.demo.window.onSave();
window.parent.close();

// 下面这是onSave代码
function onSave(){
    if(confirm("确定要保存吗?")){
         myFrom.submit();
         return true;
      }
}

分析原因

form.submitt方法之后紧接着使用**window.parent.close()**方法,submit方法总会在所有操作执行完成之后,才会执行提交,类似于java代码中的finally。等close之后再执行,页面已经被关闭,关闭之后执行submit已经晚了,相当于没有提交。
此时采取的方法是将submit提交改为异步提交。正确方法如下↓

修改后的代码

// 这两行便是主要问题代码
mainFrame.demo.window.onSave();
window.parent.close();

function onSave(){
    if(confirm('确定要保存吗?')){
      // myFrom.submit();
      asyncSave();
      return true;
    }
}

//新增异步提交方法
function asyncSave() {
      $.ajax({
           type:"post",
           url:"url",
           data:$("#myFrom").serialize(),//表单数据
           success:function(d){
           }
       })
}