JavaScript:是否可以从' form.submit() '中处理服务器错误?
JavaScript: Is it possible to handle server errors from `form.submit()`?
我通常使用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
,或其他)。如果返回成功(即:.always
的textStatus
参数是success
),然后我按照上面的方法构造并提交表单。
相关文章:
- 提示使用服务器端事件处理程序激活JavaScript
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 我可以使用jquery和AJAX来调用cgi-bin脚本,然后添加消息事件来处理服务器发送事件吗
- 流星火焰模板如何处理服务器发送的事件
- 处理服务器上的克隆节点
- 处理服务器响应AJAX
- 在Angular JS应用程序中,如何处理服务器没有响应的情况
- AngularJs.路由.处理服务器请求.很少有问题
- Do Flux(通过Facebook)使用套接字处理服务器端更新
- 如何处理服务器和客户端之间的时区
- 用于处理服务器端事件的PHP服务器导致Apache连接过多
- 如何在dojo/store/JsonRest中处理服务器响应
- 谷歌地图处理服务器端
- 在ASP.NET中处理服务器端数据的Javascript
- 如何处理服务器测试中的setInterval
- 如何在backbone.js中处理服务器错误
- JavaScript:是否可以从' form.submit() '中处理服务器错误?
- 在模态表单中处理服务器端验证的最佳实践
- 如何以可维护的方式使用React和Redux thunk处理服务器/连接异常
- Javascript:处理服务器尚未分配id的客户端初始化对象