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

时间:2014-08-02 16:50:45

标签: javascript jquery forms

我通常使用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 spec似乎只是说User agents should render the response from the HTTP "get" and "post" transactions。 HTMLFormElement spec并未说明错误。我控制服务器,并且可以更改响应,因此我可能会返回200 OK并显示错误消息,但必须有更好的方法来执行此操作。

1 个答案:

答案 0 :(得分:1)

基本上,这是不可能的,所以你必须提前检查下载是否会成功。就我而言,我只需要检查用户是否有权访问该文件。

我通过向服务器发送单独的Ajax请求来处理此问题,如果用户已获得授权,则返回成功(200),否则返回失败(403或其他)。如果返回成功(即textStatus参数.alwayssuccess),那么我构建并提交上述表单。