document.form.submit() 太慢,无法在 window.close() 之前完成

document.form.submit() is too slow to complete before window.close()

我在保存表单时遇到问题。表单本身有大约 40 行,每行大约有 12 个输入,采用这种样式:

保存后,它应该 POST 然后关闭 window。但是,它从未真正保存过它。这让我觉得它在保存之前关闭了 window 。这是有问题的代码:

 $('#save-btn').click(function() {
    document.form.submit(); 
    window.close();
 };

如果我删除 window.close() 并使用检查器,那么我在参数字段中看到所有值都正确保存。这再次让我认为 window 即将提前结束。

我试过在上面的 #save-btn 函数中使用以下内容:

setTimeout('window.close()',5000)

然而,这似乎从来没有在 5 秒后执行 window.close() 并且似乎糟糕的编程迫使它等待 5 秒然后在它可能需要任何时间时关闭。

然后我尝试使用 AJAX 请求,例如:

var _url = 'submit?nameParam="+nameParam+"&com=editlist&'+$('form').serialize();
console.log(_url); //just to see what its pushing out

$.ajax({
     url: _url,
     error: function(){
     alert('Error submitting form.');
     },

     success: function() {
     window.close();
     }
     });

这导致 414 Request-URI Too Long。我知道这种情况应该是 POST 开头,但我只是想让它起作用。

仅仅因为,我们的表单是这样设置的:

<form name="form" action="submit" method="post">

我们的解决方案是从操作页面关闭页面

您的 ajax 方法是正确的,因为您可以理解使用代码正确完成表单提交,成功后 post 很容易关闭 window。

要发送 POST 请求,您必须对代码进行一些小的更改...

  • 不要序列化您的表单并添加 URL,这不安全(不适用于您的情况)。
  • Post 你的价值观是 "post data".

这是关于它的文档。

https://api.jquery.com/jquery.post/

如果您不明白如何操作,请尝试更新您的问题。

从您的 _url 中删除序列化数据,而是通过具有 data 设置的 .ajax() 请求传递它:

var _url = 'submit?nameParam="+nameParam+"&com=editlist';

$.ajax({
    url: _url,
    method: "POST",
    data: $('form').serialize(),
    error: function() {
        alert('Error submitting form.');
    },
    success: function() {
        window.close();
    }
});