JavaScript:是否可以从' form.submit() '中处理服务器错误?

JavaScript: Is it possible to handle server errors from `form.submit()`?

本文关键字:处理 服务器 错误 submit 是否 form JavaScript      更新时间:2023-09-26

我通常使用Ajax提交表单,但有一种情况是不可能的。这个特殊的表单必须触发从服务器下载文件,并且浏览器必须生成一个"另存为"对话框。我必须用旧的方法(我认为),使用返回附件的表单提交。

为了做到这一点,我用JavaScript创建了一个表单:
   var form = document.createElement("form");
   form.setAttribute("method", "post");
   form.setAttribute("action", "/cgi-bin/myprog");
   ...create and append lots of input elements, and then
   form.submit();

这个工作正常,直到服务器必须返回一个错误。例如,如果服务器返回403 Forbidden,则浏览器只显示一个空白页面,并尝试重定向到/cgi-bin/myprog

是否有办法处理submit()的错误?W3C规范似乎只提到了User agents should render the response from the HTTP "get" and "post" transactions。HTMLFormElement规范没有说明错误。我控制服务器,并且可以更改响应,因此我可能会返回200 OK并带有错误消息,但必须有更好的方法来做到这一点。

基本上是不可能的,所以你必须提前检查下载是否会成功。在我的例子中,我只需要检查用户是否被授权访问文件。

我通过向服务器发送一个单独的Ajax请求来处理这个问题,如果用户被授权,则返回成功(200),否则返回失败(403,或其他)。如果返回成功(即:.alwaystextStatus参数是success),然后我按照上面的方法构造并提交表单。