【发布时间】:2017-02-09 01:16:52
【问题描述】:
我有一个 url,它返回一个文件,或者错误时返回一个 JSON 响应。当请求被接受时,它会以一个文件作为响应,并且应该提示用户下载(正如人们在这种情况下所期望的那样)。当请求出现问题时,响应是一个 JSON 对象,应通过 javascript 进一步处理。
请求是通过 javascript(AJAX、在新选项卡中打开、生成 iframe 等)发出的。我该如何通过 javascript 处理来自同一个 url 的两种响应?
我目前正在修改的策略(尚未开始工作)是:
- 生成 iframe
- 将表单注入 iframe
- 在 iframe 上设置
error事件处理程序 - 触发表单提交(我可以控制响应标头,因此我可以使用
Content-Disposition: attachment强制保存对话框。) - 如果触发了
error事件处理程序,则废弃 json 响应的 iframe
事实证明,当 iframe 指向触发保存对话框的文件时,iframe 不会触发 error 事件,并且在某些浏览器中不会触发 load 事件。
【问题讨论】:
-
出现错误时,无论成功的类型响应如何,都会得到 Function(jqXHR jqXHR, String textStatus, String errorThrown )。所以应该不是问题
-
@BryanDellinger 这是真的。但是,如果成功,则应提示用户下载提供的文件。我想知道的是如何将响应提交给用户进行保存(就像您在正常下载时所做的那样),同时仍然捕获同一请求的可能错误响应。
-
知道了,类似的问题stackoverflow.com/questions/3077242/… 建议使用 html5 下载属性
-
@BryanDellinger 似乎没有任何方法可以捕获错误响应。
-
所以几个月前我刚刚成功了,我使用 jquery append 将下载链接放在一个 div 中,并以正常方式处理错误。
标签: javascript jquery ajax