背景
几年前的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){
}
})
}