我通常使用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
并显示错误消息,但必须有更好的方法来执行此操作。
答案 0 :(得分:1)
基本上,这是不可能的,所以你必须提前检查下载是否会成功。就我而言,我只需要检查用户是否有权访问该文件。
我通过向服务器发送单独的Ajax请求来处理此问题,如果用户已获得授权,则返回成功(200
),否则返回失败(403
或其他)。如果返回成功(即textStatus
参数.always
为success
),那么我构建并提交上述表单。